<?xml version="1.0"?>
<doc>
    <assembly>
        <name>InTheHand.Net.Personal</name>
    </assembly>
    <members>
        <member name="T:InTheHand.Net.Sockets.SocketClientAdapter">
            <summary>
            An adapter that provides a <see cref="T:System.Net.Sockets.Socket">System.Net.Sockets.Socket</see>-like
            interface to <see cref="T:InTheHand.Net.Sockets.BluetoothClient"/> etc.
            </summary>
            -
            <remarks>
            <para>Required as  on Widcomm/Broadcom <see cref="T:InTheHand.Net.Sockets.BluetoothClient"/>
            does not support getting a <see cref="T:System.Net.Sockets.Socket"/> from
            the <see cref="T:InTheHand.Net.Sockets.BluetoothClient.Client"/> property.
            Motivated by upgrading of <see cref="T:InTheHand.Net.ObexListener"/> to
            be usable on Widcomm.
            </para>
            <para>Also adapts <see cref="T:InTheHand.Net.Sockets.IrDAClient"/>, and
            <see cref="T:System.Net.Sockets.TcpClient"/>.
            </para>
            </remarks>
        </member>
        <member name="T:InTheHand.Net.Sockets.SocketAdapter">
            <summary>
            Provide a <see cref="T:System.Net.Sockets.Socket">System.Net.Sockets.Socket</see>-like
            interace to another connection type e.g. a <see cref="T:InTheHand.Net.Sockets.BluetoothClient"/>
            </summary>
            -
            <remarks>
            <para>See class <see cref="T:InTheHand.Net.Sockets.SocketClientAdapter"/>
            for an implementation that adapts <see cref="T:InTheHand.Net.Sockets.BluetoothClient"/>
            etc to the <see cref="T:System.Net.Sockets.Socket">Socket</see>-like interface.
            That is required as on Widcomm/Broadcom <see cref="T:InTheHand.Net.Sockets.BluetoothClient"/>
            does not support getting a <see cref="T:System.Net.Sockets.Socket"/> from
            the <see cref="T:InTheHand.Net.Sockets.BluetoothClient.Client"/> property.
            Motivated by upgrading of <see cref="T:InTheHand.Net.ObexListener"/> to
            be usable on Widcomm.
            </para>
            </remarks>
        </member>
        <member name="T:InTheHand.Net.Sockets.L2CapClient">
            <summary>
            Provides client connections to a remote Bluetooth L2CAP service.
            </summary>
            -
            <remarks>
            <para>For RFCOMM connections use <see cref="T:InTheHand.Net.Sockets.BluetoothClient"/>.
            </para>
            <para>The normal usage is o create an instance, connect with 
            <see cref="M:InTheHand.Net.Sockets.L2CapClient.Connect(InTheHand.Net.BluetoothEndPoint)"/>
            or <see cref="M:InTheHand.Net.Sockets.L2CapClient.BeginConnect(InTheHand.Net.BluetoothEndPoint,System.AsyncCallback,System.Object)"/>,
            and if successful one then calls <see cref="M:InTheHand.Net.Sockets.L2CapClient.GetStream"/>
            to send and receive data.
            </para>
            <para>See the <see cref="M:InTheHand.Net.Sockets.L2CapClient.Connect(InTheHand.Net.BluetoothEndPoint)"/>
            method for more information
            on specifying the remote service to connect to.
            </para>
            </remarks>
        </member>
        <member name="M:InTheHand.Net.Sockets.L2CapClient.#ctor">
            <summary>
            Creates a new instance of <see cref="T:InTheHand.Net.Sockets.L2CapClient"/>.
            </summary>
        </member>
        <member name="M:InTheHand.Net.Sockets.L2CapClient.Close">
            <summary>
            Closes the <see cref="T:InTheHand.Net.Sockets.L2CapClient"/> and the underlying connection.
            </summary>
            -
            <seealso cref="M:InTheHand.Net.Sockets.L2CapClient.Dispose"/>
        </member>
        <member name="M:InTheHand.Net.Sockets.L2CapClient.Dispose">
            <summary>
            Closes the <see cref="T:InTheHand.Net.Sockets.L2CapClient"/> and the underlying connection.
            </summary>
            -
            <seealso cref="M:InTheHand.Net.Sockets.L2CapClient.Close"/>
        </member>
        <member name="M:InTheHand.Net.Sockets.L2CapClient.Connect(InTheHand.Net.BluetoothEndPoint)">
            <summary>
            Connects to a remote Bluetooth L2CAP service
            using the specified remote endpoint.
            </summary>
            -
            <remarks>
            <para>The <see cref="T:InTheHand.Net.BluetoothEndPoint"/> must
            have the <see cref="P:InTheHand.Net.BluetoothEndPoint.Address"/>
            set, and either the <see cref="P:InTheHand.Net.BluetoothEndPoint.Service"/>
            or <see cref="P:InTheHand.Net.BluetoothEndPoint.Port"/> properties
            set.
            The port is the L2CAP PSM number, and if set a connection will be
            made to that PSM and the Service Class Id ignored.
            Note that only certain PSM values are valid.  See 
            <see cref="T:InTheHand.Net.Sockets.L2CapListener"/> for more
            information.
            </para>
            </remarks>
            -
            <param name="remoteEP">The <see cref="T:InTheHand.Net.BluetoothEndPoint"/>
            to which you intend to connect. See the remarks for usage.
            </param>
        </member>
        <member name="M:InTheHand.Net.Sockets.L2CapClient.BeginConnect(InTheHand.Net.BluetoothEndPoint,System.AsyncCallback,System.Object)">
            <summary>
            Begins an asynchronous request for a remote host connection.
            </summary>
            -
            <remarks>
            <para>See 
            <see cref="M:InTheHand.Net.Sockets.L2CapClient.Connect(InTheHand.Net.BluetoothEndPoint)"/>
            for more information.
            </para>
            </remarks>
            -
            <param name="remoteEP">The <see cref="T:InTheHand.Net.BluetoothEndPoint"/>
            to which you intend to connect.
            See 
            or <see cref="M:InTheHand.Net.Sockets.L2CapClient.Connect(InTheHand.Net.BluetoothEndPoint)"/>,
            for more information.
            </param>
            <param name="requestCallback">An <see cref="T:System.AsyncCallback"/>
            delegate that references the method to invoke when the operation is
            complete.
            </param>
            <param name="state">A user-defined object that contains information
            about the connect operation. This object is passed to the
            <paramref name="requestCallback"/> delegate when the operation is
            complete.
            </param>
            -
            <returns>An <see cref="T:System.IAsyncResult"/> object that
            references the asynchronous connection,
            which may still be pending.
            </returns>
        </member>
        <member name="M:InTheHand.Net.Sockets.L2CapClient.EndConnect(System.IAsyncResult)">
            <summary>
            Asynchronously accepts an incoming connection attempt.
            </summary>
            -
            <param name="asyncResult">An <see cref="T:System.IAsyncResult"/>
            object returned by a call to 
            or <see cref="M:InTheHand.Net.Sockets.L2CapClient.BeginConnect(InTheHand.Net.BluetoothEndPoint,System.AsyncCallback,System.Object)"/>,
            </param>
        </member>
        <member name="M:InTheHand.Net.Sockets.L2CapClient.GetStream">
            <summary>
            Returns the <see cref="T:System.IO.Stream"/> used to send and
            receive data.
            </summary>
            -
            <remarks>
            <para>Note it is NOT a <see cref="T:System.Net.Sockets.NetworkStream"/>.
            That type handles SOCK_STREAM connections, whereas L2CAP uses
            SOCK_SEQPACKET.
            Different Stream subclasses may be returned by different platforms.
            </para>
            </remarks>
            -
            <returns>The <see cref="T:System.IO.Stream"/> used to send and
            receive data.
            </returns>
        </member>
        <member name="M:InTheHand.Net.Sockets.L2CapClient.GetMtu">
            <summary>
            Get the MTU................
            </summary>
            <returns>int</returns>
        </member>
        <member name="P:InTheHand.Net.Sockets.L2CapClient.RemoteEndPoint">
            <summary>
            Get the remote endpoint.
            </summary>
            -
            <value>
            The <see cref="T:InTheHand.Net.BluetoothEndPoint"/> with which the 
            <see cref="T:InTheHand.Net.Sockets.L2CapClient"/> is communicating.
            </value>
        </member>
        <member name="T:InTheHand.Net.Sockets.IrDASocketOptionLevel">
            <summary>
            Defines additional IrDA socket option levels for the <see cref="M:System.Net.Sockets.Socket.SetSocketOption(System.Net.Sockets.SocketOptionLevel,System.Net.Sockets.SocketOptionName,System.Int32)"/> and <see cref="M:System.Net.Sockets.Socket.GetSocketOption(System.Net.Sockets.SocketOptionLevel,System.Net.Sockets.SocketOptionName)"/> methods.
            </summary>
            <remarks>
            Use along with the socket options defined by 
            <see cref="T:InTheHand.Net.Sockets.IrDASocketOptionName"/>.
            </remarks>
            <seealso cref="T:InTheHand.Net.Sockets.IrDASocketOptionName"/>
        </member>
        <member name="F:InTheHand.Net.Sockets.IrDASocketOptionLevel.IrLmp">
            <summary>
            The socket option level for use with IrDA sockets 
            along with the options defined in <see 
            cref="T:InTheHand.Net.Sockets.IrDASocketOptionName"/>.
            </summary>
            <remarks>
            Use along with the socket options defined by 
            <see cref="T:InTheHand.Net.Sockets.IrDASocketOptionName"/>.
            </remarks>
            <seealso cref="T:InTheHand.Net.Sockets.IrDASocketOptionName"/>
        </member>
        <member name="T:InTheHand.Net.Bluetooth.BluetoothWin32AuthenticationEventArgs">
            <summary>
            Provides data for an authentication event.
            </summary>
            -
            <remarks>
            <para>For usage information, see the class documentation at
            <see cref="T:InTheHand.Net.Bluetooth.BluetoothWin32Authentication"/> it includes
            an example, 
            also see the documentation on each of this class&#x2019;s properties.
            </para>
            </remarks>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothWin32AuthenticationEventArgs.SixDigitsFormatString">
            <summary>
            A format string to display the Passkey or comparison Number as six decimal digits.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothWin32AuthenticationEventArgs.ErrorMessageSendingAnotherPinIsDisallowed_">
            <exclude/>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.BluetoothWin32AuthenticationEventArgs.#ctor">
            <summary>
            Initialize an instance of <see cref="T:InTheHand.Net.Bluetooth.BluetoothWin32AuthenticationEventArgs"/>.
            </summary>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.BluetoothWin32AuthenticationEventArgs.#ctor(InTheHand.Net.Sockets.BluetoothDeviceInfo)">
            <summary>
            Initialize an instance of <see cref="T:InTheHand.Net.Bluetooth.BluetoothWin32AuthenticationEventArgs"/>.
            </summary>
            -
            <param name="device">The device information to store in the event args.
            </param>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.BluetoothWin32AuthenticationEventArgs.ConfirmOob(System.Byte[],System.Byte[])">
            <summary>
            Creates a positive response to the
            <see cref="F:InTheHand.Net.Bluetooth.BluetoothAuthenticationMethod.OutOfBand"/>
            pairing event also providing optional security values.
            </summary>
            -
            <param name="c">An byte array of length 16 bytes, or null.
            A 128-bit cryptographic key used for two-way authentication.
            </param>
            <param name="r">An byte array of length 16 bytes, or null.
            A randomly generated number used for one-way authentication.
            If this number is not provided by the device initiating the OOB
            session, this value is 0.
            </param>
        </member>
        <member name="P:InTheHand.Net.Bluetooth.BluetoothWin32AuthenticationEventArgs.Device">
            <summary>
            Gets the device requiring an authentication response as a
            <see cref="T:InTheHand.Net.Sockets.BluetoothDeviceInfo"/>.
            </summary>
        </member>
        <member name="P:InTheHand.Net.Bluetooth.BluetoothWin32AuthenticationEventArgs.AuthenticationRequirements">
            <summary>
            Gets a <see cref="T:InTheHand.Net.Bluetooth.BluetoothAuthenticationRequirements"/>
            enumeration value that specifies the 'Man in the Middle' protection
            required for authentication.
            </summary>
        </member>
        <member name="P:InTheHand.Net.Bluetooth.BluetoothWin32AuthenticationEventArgs.IoCapability">
            <summary>
            Gets a <see cref="T:InTheHand.Net.Bluetooth.BluetoothIoCapability"/>
            enumeration value that defines the input/output capabilities of the
            Bluetooth device.
            </summary>
        </member>
        <member name="P:InTheHand.Net.Bluetooth.BluetoothWin32AuthenticationEventArgs.AuthenticationMethod">
            <summary>
            Gets a <see cref="T:InTheHand.Net.Bluetooth.BluetoothAuthenticationMethod"/>
            enumeration value that defines the authentication method utilized
            by the Bluetooth device.
            </summary>
            -
            <remarks>
            <para>The method to be used depends on the
            <see cref="P:InTheHand.Net.Bluetooth.BluetoothWin32AuthenticationEventArgs.AuthenticationRequirements"/>
            and the <see cref="P:InTheHand.Net.Bluetooth.BluetoothWin32AuthenticationEventArgs.IoCapability"/> on both machines.
            </para>
            <para>See <see href="http://32feet.codeplex.com/wikipage?title=BluetoothWin32Authentication"/>
            for how to respond to each of the authentication methods.
            </para>
            </remarks>
        </member>
        <member name="P:InTheHand.Net.Bluetooth.BluetoothWin32AuthenticationEventArgs.JustWorksNumericComparison">
            <summary>
            Gets whether the <see cref="P:InTheHand.Net.Bluetooth.BluetoothWin32AuthenticationEventArgs.AuthenticationMethod"/> is 
            <see cref="F:InTheHand.Net.Bluetooth.BluetoothAuthenticationMethod.NumericComparison"/>
            and it is of subtype "JustWorks".
            </summary>
            -
            <remarks>
            <para>Gets whether the <see cref="P:InTheHand.Net.Bluetooth.BluetoothWin32AuthenticationEventArgs.AuthenticationMethod"/> is 
            <see cref="F:InTheHand.Net.Bluetooth.BluetoothAuthenticationMethod.NumericComparison"/>
            and it is of subtype "JustWorks".
            </para>
            <para>If true then a simple Yes/No answer from the user is adequate,
            Or if false then the <see cref="P:InTheHand.Net.Bluetooth.BluetoothWin32AuthenticationEventArgs.NumberOrPasskey"/>
            (or <see cref="P:InTheHand.Net.Bluetooth.BluetoothWin32AuthenticationEventArgs.NumberOrPasskeyAsString"/>)
            value should be displayed to the user(s) so that he/she/they can
            verify that the values displayed on both devices are the same.
            Is null if 
            <see cref="P:InTheHand.Net.Bluetooth.BluetoothWin32AuthenticationEventArgs.AuthenticationRequirements"/>
            is not 
            <see cref="F:InTheHand.Net.Bluetooth.BluetoothAuthenticationMethod.NumericComparison"/>.
            </para>
            </remarks>
        </member>
        <member name="P:InTheHand.Net.Bluetooth.BluetoothWin32AuthenticationEventArgs.NumberOrPasskey">
            <summary>
            Get the Numeric or Passcode value being used by the 
            SSP pairing event.
            </summary>
            -
            <value>Is a six digit number from 000000 to 999999,
            or <see langword="null"/> if not present.
            </value>
            -
            <remarks>
            <para>Will be present in the
            <see cref="F:InTheHand.Net.Bluetooth.BluetoothAuthenticationMethod.NumericComparison"/>,
            <see cref="P:InTheHand.Net.Bluetooth.BluetoothWin32AuthenticationEventArgs.JustWorksNumericComparison"/>,
            and <see cref="F:InTheHand.Net.Bluetooth.BluetoothAuthenticationMethod.PasskeyNotification"/>
            authentication methods only.
            </para>
            <para>Is a six digit number from 000000 to 999999.
            </para>
            </remarks>
        </member>
        <member name="P:InTheHand.Net.Bluetooth.BluetoothWin32AuthenticationEventArgs.NumberOrPasskeyAsString">
            <summary>
            Gets the <see cref="P:InTheHand.Net.Bluetooth.BluetoothWin32AuthenticationEventArgs.NumberOrPasskey"/>
            formatted in its correct six decimal digits format.
            </summary>
            -
            <value>A <see cref="T:System.String"/> representing
            <see cref="P:InTheHand.Net.Bluetooth.BluetoothWin32AuthenticationEventArgs.NumberOrPasskey"/>
            formatted in its six decimal digits format,
            or <see langword="null"/> if 
            <see cref="P:InTheHand.Net.Bluetooth.BluetoothWin32AuthenticationEventArgs.NumberOrPasskey"/>
            is <see langword="null"/>.
            </value>
        </member>
        <member name="P:InTheHand.Net.Bluetooth.BluetoothWin32AuthenticationEventArgs.Pin">
            <summary>
            Gets or sets the PIN string to be used to authenticate the specified device.
            </summary>
            -
            <remarks>
            <para>Is only used in the 
            <see cref="F:InTheHand.Net.Bluetooth.BluetoothAuthenticationMethod.Legacy"/>
            pairing method.
            </para>
            <para>On an authentication event, a PIN response is sent if the value 
            returned from the handler is not <see langword="null"/>.
            </para>
            </remarks>
        </member>
        <member name="P:InTheHand.Net.Bluetooth.BluetoothWin32AuthenticationEventArgs.Confirm">
            <summary>
            Get or set whether we will respond positively, negatively or
            ignore the SSP pairing event.
            </summary>
        </member>
        <member name="P:InTheHand.Net.Bluetooth.BluetoothWin32AuthenticationEventArgs.ResponseNumberOrPasskey">
            <summary>
            Get or set what Numeric or Passcode value or whether no value
            will be used in responding to the SSP pairing event.
            </summary>
            -
            <remarks>
            <para>Is a number from 000000 to 999999, or null if not to be included
            in the response.
            </para>
            </remarks>
        </member>
        <member name="P:InTheHand.Net.Bluetooth.BluetoothWin32AuthenticationEventArgs.CallbackWithResult">
            <summary>
            Gets or sets whether the callback is called again after the PIN response
            is sent.
            </summary>
            -
            <remarks><para>This is useful to see the error code returned by sending
            the PIN response. It can thus also be used to see the successful result 
            of sending the PIN response.  See the documentation on the 
            <see cref="T:InTheHand.Net.Bluetooth.BluetoothWin32Authentication"/> class.
            </para>
            </remarks>
        </member>
        <member name="P:InTheHand.Net.Bluetooth.BluetoothWin32AuthenticationEventArgs.AttemptNumber">
            <summary>
            Gets how many attempts at sending a PIN have been tried.
            </summary>
            <remarks>
            When there&#x2019;s a new PIN request, the first time the callback is
            called this property will have value zero.  If the PIN is rejected and
            <see cref="P:InTheHand.Net.Bluetooth.BluetoothWin32AuthenticationEventArgs.CallbackWithResult"/>
            was set, then the callback will be recalled and this property will have
            value one, etc.
            </remarks>
        </member>
        <member name="P:InTheHand.Net.Bluetooth.BluetoothWin32AuthenticationEventArgs.PreviousNativeErrorCode">
            <summary>
            The Windows error code returned by the last PIN response attempt.
            </summary>
            -
            <remarks><para>A bad PIN/passcode value appears to result in a error code
            with value 1244, which is <see cref="F:InTheHand.Net.Bluetooth.BluetoothWin32Authentication.NativeErrorNotAuthenticated"/>.
            </para>
            <para>If one tries to respond to that failure with another passcode,
            then error 1167 <see cref="F:InTheHand.Net.Bluetooth.BluetoothWin32Authentication.NativeErrorDeviceNotConnected"/>
            results.  So it seems that only one attempt is possible.
            </para>
            </remarks>
        </member>
        <member name="P:InTheHand.Net.Bluetooth.BluetoothWin32AuthenticationEventArgs.PreviousNativeErrorCodeAsUnsigned">
            <summary>
            The Windows error code returned by the last PIN response attempt,
            as an unsigned value.
            </summary>
            -
            <remarks>See <see cref="P:InTheHand.Net.Bluetooth.BluetoothWin32AuthenticationEventArgs.PreviousNativeErrorCode"/>.
            </remarks>
            -
            <seealso cref="P:InTheHand.Net.Bluetooth.BluetoothWin32AuthenticationEventArgs.PreviousNativeErrorCode"/>
        </member>
        <member name="P:InTheHand.Net.Bluetooth.BluetoothWin32AuthenticationEventArgs.CannotSendAnotherResponse">
            <summary>
            Gets whether it is not possible to send another PIN response.
            </summary>
            <remarks><para>For instance, in testing it appears that after one response
            the device becomes non-contactable, any PIN response returning error code
            <see cref="F:InTheHand.Net.Bluetooth.BluetoothWin32Authentication.NativeErrorDeviceNotConnected"/>.
            </para>
            </remarks>
        </member>
        <member name="T:InTheHand.Net.Bluetooth.Factory.IBluetoothDeviceInfo">
            <exclude/>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.Factory.IBluetoothDeviceInfo.Merge(InTheHand.Net.Bluetooth.Factory.IBluetoothDeviceInfo)">
            <summary>
            Update the instance with value from the other.
            </summary>
            -
            <param name="other">The other device, to read properties from.
            </param>
            -
            <remarks>
            <para>Used by the device discovery code in merging the devices 
            found by Inquiry and the 'remembered' devices. The current
            device is the one found by inqury and the <paramref name="other"/>
            device is a 'remembered' one. So its common to update the
            'Remembered' and 'Authenticated' properties for instance.
            </para>
            </remarks>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.Widcomm.WidcommBluetoothDeviceInfo.CreateFromStoredRemoteDeviceInfo(InTheHand.Net.Bluetooth.Widcomm.REM_DEV_INFO,InTheHand.Net.Bluetooth.Widcomm.WidcommBluetoothFactoryBase)">
            <summary>
            Used when loading a stack stored/remembered/maybe-paired device.
            </summary>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.Widcomm.WidcommBluetoothDeviceInfo.CreateFromHandleDeviceResponded(System.Byte[],System.Byte[],System.Byte[],System.Boolean,InTheHand.Net.Bluetooth.Widcomm.WidcommBluetoothFactoryBase)">
            <summary>
            Used when a device is discovered during Inquiry.
            </summary>
            -
            <remarks>
            <para>When the result of Inquiry and get-stack-stored-devices are merged,
            the remembered/authenticated flags may get set then (with <see cref="M:SetAuthenticated"/>).
            </para>
            </remarks>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.Widcomm.WidcommBluetoothDeviceInfo.CheckAndSetIfPaired(InTheHand.Net.Bluetooth.Widcomm.WidcommBluetoothDeviceInfo,InTheHand.Net.Bluetooth.Widcomm.WidcommBluetoothFactoryBase)">
            <summary>
            Called after reading the device from the Registry, to find if it is paired.
            </summary>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.Widcomm.WidcommBluetoothDeviceInfo.Merge(InTheHand.Net.Bluetooth.Factory.IBluetoothDeviceInfo)">
            <summary>
            For use when the results of Inquiry and get-stack-stored-devices are merged.
            </summary>
        </member>
        <member name="T:InTheHand.Net.Bluetooth.Msft.MicrosoftSdpService">
            <exclude/>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.Msft.MicrosoftSdpService.RemoveService(System.IntPtr,System.Byte[])">
            <exclude/>
            <summary>
            Remove a SDP record as added by <see cref="M:InTheHand.Net.Bluetooth.Msft.MicrosoftSdpService.SetService(System.Byte[],InTheHand.Net.Bluetooth.ServiceClass)"/>.
            </summary>
            <param name="handle">The handle.
            </param>
            <param name="sdpRecord">The raw record, presumably not actually used by the stack.
            </param>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.Msft.MicrosoftSdpService.SetService(System.Byte[],InTheHand.Net.Bluetooth.ServiceClass)">
            <exclude/>
            <summary>
            Add a SDP record.
            </summary>
            -
            <param name="sdpRecord">An array of <see cref="T:System.Byte"/>
            containing the complete SDP record.
            </param>
            <param name="cod">A <see cref="T:InTheHand.Net.Bluetooth.ServiceClass"/>
            containing any bits to set in the devices Class of Device value.
            </param>
            -
            <returns>A handle representing the record, pass to 
            <see cref="M:InTheHand.Net.Bluetooth.Msft.MicrosoftSdpService.RemoveService(System.IntPtr,System.Byte[])"/> to remote the record.
            </returns>
        </member>
        <member name="T:InTheHand.Net.Bluetooth.Factory.IL2CapClient">
            <exclude/>
        </member>
        <member name="T:InTheHand.Net.Bluetooth.Factory.IBluetoothClient">
            <exclude/>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.Factory.IL2CapClient.GetMtu">
            <exclude/>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BlueZ.StackConsts.so_RFCOMM_CONNINFO">
            <summary>
            Use with struct rfcomm_conninfo{hci_handle, dev_class}.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BlueZ.StackConsts.BDADDR_ANY">
            
        </member>
        <member name="T:InTheHand.Net.Bluetooth.BlueZ.StackConsts.SdpRecordRegisterFlags">
            <summary>
            Values of the flags parameter to sdp_record_register
            </summary>
        </member>
        <member name="T:InTheHand.Net.Bluetooth.BlueZ.StackConsts.SdpConnectFlags">
            <summary>
            Values of the flags parameter to sdp_connect
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BlueZ.StackConsts.sdp_attrreq_type_t.SDP_ATTR_REQ_INDIVIDUAL">
            <summary>
            Attributes are specified as individual elements
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BlueZ.StackConsts.sdp_attrreq_type_t.SDP_ATTR_REQ_RANGE">
            <summary>
            Attributes are specified as a range
            </summary>
        </member>
        <member name="T:InTheHand.Net.Bluetooth.BlueSoleil.IBluesoleilApi">
            <exclude/>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.BlueSoleil.IBluesoleilApi.Btsdk_IsSDKInitialized">
            <summary>
            The Btsdk_IsSDKInitialized function indicates whether a successful
            call to Btsdk_Init is made.
            </summary>
            <returns>
            </returns>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.BlueSoleil.IBluesoleilApi.Btsdk_IsServerConnected">
            <summary>
            The Btsdk_IsServerConnected function checks whether client
            application can call BlueSoleil Server APIs.
            </summary>
            <returns>
            When this fuction returns
            <see langword="true"/>, client application can call APIs normally, versa versit.
            </returns>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.BlueSoleil.IBluesoleilApi.Btsdk_SetStatusInfoFlag(System.UInt16)">
            <summary>
            The Btsdk_SetStatusInfoFlag function is used to set the status
            changing callback types which the user wants to receive.
            </summary>
            -
            <remarks>
            usMsgType can be one of the following value or their combination:
            <list type="definition">
            <item><term>BTSDK_NTSERVICE_STATUS_FLAG</term>
            <description>The status change of BlueSoleil server
            event or OS message event.</description>
            </item>
            <item><term>BTSDK_BLUETOOTH_STATUS_FLAG</term>
            <description>Message event of the change of Bluetooth</description>
            status.
            </item>
            <item><term>BTSDK_REFRESH_STATUS_FLAG</term>
            <description>Refresh event.</description>
            </item>
            </list>
            </remarks>
            -
            <param name="usMsgType">See remarks.</param>
            -
            <returns>BTSDK_OK for success, other for error code.</returns>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.BlueSoleil.IBluesoleilApi.Btsdk_IsBluetoothReady">
            <summary>
            The Btsdk_IsBluetoothReady function checks whether the local
            Bluetooth device is working.
            </summary>
            <returns>Boolean</returns>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.BlueSoleil.IBluesoleilApi.Btsdk_UpdateRemoteDeviceName(System.UInt32,System.Byte[],System.UInt16@)">
            <summary>
            Gets the current user-friendly name of the specified remote device.
            </summary>
            -
            <remarks>
            Before calling Btsdk_UpdateRemoteDeviceName, the device database must be initialized by a
            previous successful call to Btsdk_StartBluetooth.
            The user-friendly device name is a UTF-8 character string. The device name acquired by this
            command is stored automatically in the device database.
            </remarks>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.BlueSoleil.IBluesoleilApi.Btsdk_GetRemoteRSSI(System.UInt32,System.SByte@)">
            <summary>
            "gets the RSSI value of the specified remote device."
            </summary>
            -
            <remarks>
            <para>
            </para>
            <para>"a connection between local device and the specified
            remote device must be created first."
            </para>
            </remarks>
            -
            <param name="device_handle">hDev
            </param>
            <param name="prssi">"Range: -128 to 127 (dB)."
            </param>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.BlueSoleil.IBluesoleilApi.Btsdk_GetRemoteLinkQuality(System.UInt32,System.UInt16@)">
            <summary>
            "gets the current link quality value of the connection between local
            device and the specified remote device."
            </summary>
            -
            <remarks>"The higher the value, the better the link quality is."
            </remarks>
            -
            <returns>"Range: 0 to 0xFF."
            </returns>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.BlueSoleil.IBluesoleilApi.Btsdk_GetRemoteDeviceName(System.UInt32,System.Byte[],System.UInt16@)">
            <summary>
            "Gets the user-friendly name of the specified remote device from the device database."
            </summary>
            -
            <remarks>
            "Before calling Btsdk_GetRemoteDeviceName, the device database must be initialized by a
            previous successful call to Btsdk_Init.
            The user-friendly device name is a UTF-8 character string. The Btsdk_GetRemoteDeviceNamefunction returns =BTSDK_OPERATION_FAILURE immediately if the device name doesn’t
            exist in the database. In this case, the application shall call Btsdk_UpdateRemoteDeviceName
            to acquire the name information directly from the remote device.
            BlueSoleil will automatically update the device name when the local device connects to the
            specified remote device.
            </remarks>
        </member>
        <member name="T:InTheHand.Net.Bluetooth.AttributeIds.UniversalAttributeId">
            <summary>
            Defines the ids for the &#x201C;universal attributes&#x201D;, those 
            &#x201C;whose definitions are common to all service records.&#x201D;
            </summary>
            <remarks>
            <para>&#x201C;
            Universal attributes are those service attributes whose definitions are common
            to all service records. Note that this does not mean that every service record
            must contain values for all of these service attributes. However, if a service
            record has a service attribute with an attribute ID allocated to a universal
            attribute, the attribute value must conform to the universal attribute’s definition.
            </para><para>&#x201C;
            Only two attributes are required to exist in every service record instance. They
            are the ServiceRecordHandle (attribute ID 0x0000) and the ServiceClassIDList
            (attribute ID 0x0001). All other service attributes are optional within a service
            record.
            &#x201D;</para>
            <para>&#x201C;Attribute IDs in the range of 0x000D-0x01FF are reserved.&#x201D;</para>
            </remarks>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.AttributeIds.UniversalAttributeId.ServiceRecordHandle">
            <summary>
            A service record handle is a 32-bit number that uniquely identifies each service
            record within an SDP server.
            [0x0000]
            </summary>
            <remarks>
            <para>[<c>32-bit unsigned integer</c>]</para>
            </remarks>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.AttributeIds.UniversalAttributeId.ServiceClassIdList">
            <summary>
            The ServiceClassIDList attribute consists of a data element sequence in which
            each data element is a UUID representing the service classes that a given service
            record conforms to.
            [0x0001]
            </summary>
            <remarks>
            <para>[<c>Data Element Sequence</c>]</para>
            <para>&#x201C;The ServiceClassIDList attribute consists of a data element sequence in which
            each data element is a UUID representing the service classes that a given service
            record conforms to. The UUIDs are listed in order from the most specific
            class to the most general class. The ServiceClassIDList must contain at least
            one service class UUID.&#x201D;</para>
            </remarks>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.AttributeIds.UniversalAttributeId.ServiceRecordState">
             <summary>
             The ServiceRecordState is a 32-bit integer that is used to facilitate caching of
             ServiceAttributes.
             [0x0002]
             </summary>
            <remarks>
             <para>[<c>32-bit unsigned integer</c>]</para>
             <para>&#x201C;
             The ServiceRecordState is a 32-bit integer that is used to facilitate caching of
             ServiceAttributes. If this attribute is contained in a service record, its value is
             guaranteed to change when any other attribute value is added to, deleted from
             or changed within the service record. This permits a client to check the value of
             this single attribute. If its value has not changed since it was last checked, the
             client knows that no other attribute values within the service record have
             changed.
             &#x201D;</para>
             </remarks>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.AttributeIds.UniversalAttributeId.ServiceId">
             <summary>
             The ServiceID is a UUID that universally and uniquely identifies the service
             instance described by the service record.
             [0x0003]
             </summary>
            <remarks>
             <para>[<c>UUID</c>]</para>
             <para>&#x201C;
             The ServiceID is a UUID that universally and uniquely identifies the service
             instance described by the service record. This service attribute is particularly
             useful if the same service is described by service records in more than one
             SDP server.
             &#x201D;</para>
             </remarks>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.AttributeIds.UniversalAttributeId.ProtocolDescriptorList">
             <summary>
             The ProtocolDescriptorList attribute describes one or more protocol stacks that
             may be used to gain access to the service described by the service record.
             [0x0004]
             </summary>
            <remarks>
             <para>[<c>Data Element Sequence</c> or <c>Data Element Alternative</c>]</para>
             <para>&#x201C;
             The ProtocolDescriptorList attribute describes one or more protocol stacks that
             may be used to gain access to the service described by the service record.
             </para><para>&#x201C;
             If the ProtocolDescriptorList describes a single stack, it takes the form of a data
             element sequence in which each element of the sequence is a protocol
             descriptor. Each protocol descriptor is, in turn, a data element sequence whose
             first element is a UUID identifying the protocol and whose successive elements
             are protocol-specific parameters. Potential protocol-specific parameters are a
             protocol version number and a connection-port number. The protocol descriptors
             are listed in order from the lowest layer protocol to the highest layer protocol
             used to gain access to the service.
             </para><para>&#x201C;
             If it is possible for more than one kind of protocol stack to be used to gain
             access to the service, the ProtocolDescriptorList takes the form of a data element
             alternative where each member is a data element sequence as described
             in the previous paragraph.
             </para><para>&#x201C;
             Protocol Descriptors
             </para><para>&#x201C;
             A protocol descriptor identifies a communications protocol and provides protocol-
             specific parameters. A protocol descriptor is represented as a data element
             sequence. The first data element in the sequence must be the UUID that identifies
             the protocol. Additional data elements optionally provide protocol-specific
             information, such as the L2CAP protocol/service multiplexer (PSM) and the
             RFCOMM server channel number (CN) shown below.
             </para><para>&#x201C;
             ProtocolDescriptorList Examples
             </para><para>&#x201C;
             These examples are intended to be illustrative. The parameter formats for each
             protocol are not defined within this specification.
             </para><para>&#x201C;
             In the first two examples, it is assumed that a single RFCOMM instance exists
             on top of the L2CAP layer. In this case, the L2CAP protocol specific information
             (PSM) points to the single instance of RFCOMM. In the last example, two different
             and independent RFCOMM instances are available on top of the L2CAP
             layer. In this case, the L2CAP protocol specific information (PSM) points to a
             distinct identifier that distinguishes each of the RFCOMM instances. According
             to the L2CAP specification, this identifier takes values in the range
             0x1000-0xFFFF.
             </para><para>&#x201C;
             IrDA-like printer
             </para><para>&#x201C;
             ( ( L2CAP, PSM=RFCOMM ), ( RFCOMM, CN=1 ), ( PostscriptStream ) )
             </para><para>&#x201C;
             IP Network Printing
             </para><para>&#x201C;
             ( ( L2CAP, PSM=RFCOMM ), ( RFCOMM, CN=2 ), ( PPP ), ( IP ), ( TCP ),
             ( IPP ) )
             </para><para>&#x201C;
             Synchronization Protocol Descriptor Example
             </para><para>&#x201C;
             ( ( L2CAP, PSM=0x1001 ), ( RFCOMM, CN=1 ), ( Obex ), ( vCal ) )
             </para><para>&#x201C;
             ( ( L2CAP, PSM=0x1002 ), ( RFCOMM, CN=1 ), ( Obex ),
             </para><para>&#x201C;
             ( otherSynchronisationApplication ) )
             &#x201D;</para>
             </remarks>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.AttributeIds.UniversalAttributeId.BrowseGroupList">
             <summary>
             The BrowseGroupList attribute consists of a data element sequence in which
             each element is a UUID that represents a browse group to which the service
             record belongs.
             [0x0005]
             </summary>
            <remarks>
             <para>[<c>Data Element Sequence</c>]</para>
             <para>&#x201C;
             The BrowseGroupList attribute consists of a data element sequence in which
             each element is a UUID that represents a browse group to which the service
             record belongs. The top-level browse group ID, called PublicBrowseRoot and
             representing the root of the browsing hierarchy, has the value 
             00001002-0000-1000-8000-00805F9B34FB 
             (UUID16: 0x1002) from the Bluetooth Assigned
             Numbers document.
             &#x201D;</para>
             </remarks>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.AttributeIds.UniversalAttributeId.LanguageBaseAttributeIdList">
             <summary>
             In order to support human-readable attributes for multiple natural languages in
             a single service record, a base attribute ID is assigned for each of the natural
             languages used in a service record. The human-readable universal attributes
             are then defined with an attribute ID offset from each of these base values,
             rather than with an absolute attribute ID.
             [0x0006]
             </summary>
            <remarks>
             <para>[<c>Data Element Sequence</c>]</para>
             <para>&#x201C;
             In order to support human-readable attributes for multiple natural languages in
             a single service record, a base attribute ID is assigned for each of the natural
             languages used in a service record. The human-readable universal attributes
             are then defined with an attribute ID offset from each of these base values,
             rather than with an absolute attribute ID.
             </para><para>&#x201C;
             The LanguageBaseAttributeIDList attribute is a list in which each member contains
             a language identifier, a character encoding identifier, and a base attribute
             ID for each of the natural languages used in the service record. The Language-
             BaseAttributeIDList attribute consists of a data element sequence in which
             each element is a 16-bit unsigned integer. The elements are grouped as triplets
             (threes).
             </para><para>&#x201C;
             The first element of each triplet contains an identifier representing the natural
             language. The language is encoded according to ISO 639:1988 (E/F): “Code
             for the representation of names of languages”.
             </para><para>&#x201C;
             The second element of each triplet contains an identifier that specifies a character
             encoding used for the language. Values for character encoding can be
             found in IANA's database1, and have the values that are referred to as MIBEnum
             values. The recommended character encoding is UTF-8.
             </para><para>&#x201C;
             The third element of each triplet contains an attribute ID that serves as the
             base attribute ID for the natural language in the service record. Different service
             records within a server may use different base attribute ID values for the
             same language.
             </para><para>&#x201C;
             To facilitate the retrieval of human-readable universal attributes in a principal
             language, the base attribute ID value for the primary language supported by a
             service record must be 0x0100. Also, if a LanguageBaseAttributeIDList
             attribute is contained in a service record, the base attribute ID value contained
             in its first element must be 0x0100.
             </para>
             </remarks>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.AttributeIds.UniversalAttributeId.ServiceInfoTimeToLive">
             <summary>
             The ServiceTimeToLive attribute is a 32-bit integer that contains the number of
             seconds for which the information in a service record is expected to remain
             valid and unchanged.
             [0x0007]
             </summary>
            <remarks>
             <para>[<c>32-bit unsigned integer</c>]</para>
             <para>&#x201C;
             The ServiceTimeToLive attribute is a 32-bit integer that contains the number of
             seconds for which the information in a service record is expected to remain
             valid and unchanged. This time interval is measured from the time that the
             attribute value is retrieved from the SDP server. This value does not imply a
             guarantee that the service record will remain available or unchanged. It is
             simply a hint that a client may use to determine a suitable polling interval to revalidate
             the service record contents.
             &#x201D;</para>
             </remarks>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.AttributeIds.UniversalAttributeId.ServiceAvailability">
             <summary>
             The ServiceAvailability attribute is an 8-bit unsigned integer that represents the
             relative ability of the service to accept additional clients.
             [0x0008]
             </summary>
            <remarks>
             <para>[<c>8-bit unsigned integer</c>]</para>
             <para>&#x201C;
             The ServiceAvailability attribute is an 8-bit unsigned integer that represents the
             relative ability of the service to accept additional clients. A value of 0xFF indicates
             that the service is not currently in use and is thus fully available, while a
             value of 0x00 means that the service is not accepting new clients. For services
             that support multiple simultaneous clients, intermediate values indicate the relative
             availability of the service on a linear scale.
             &#x201D;</para><para>&#x201C;
             For example, a service that can accept up to 3 clients should provide ServiceAvailability
             values of 0xFF, 0xAA, 0x55, and 0x00 when 0, 1, 2, and 3 clients, respectively,
             are utilizing the service. The value 0xAA is approximately (2/3) * 0xFF and
             represents 2/3 availability, while the value 0x55 is approximately (1/3)*0xFF and
             represents 1/3 availability. Note that the availability value may be approximated as
             &#x201D;</para><para>&#x201C;
             <c>( 1 - ( current_number_of_clients / maximum_number_of_clients ) ) * 0xFF</c>
             &#x201D;</para><para>&#x201C;
             When the maximum number of clients is large, this formula must be modified to
             ensure that ServiceAvailability values of 0x00 and 0xFF are reserved for their
             defined meanings of unavailability and full availability, respectively.
             &#x201D;</para><para>&#x201C;
             Note that the maximum number of clients a service can support may vary
             according to the resources utilized by the service's current clients.
             &#x201D;</para><para>&#x201C;
             A non-zero value for ServiceAvailability does not guarantee that the service will
             be available for use. It should be treated as a hint or an approximation of availability
             status.
             &#x201D;</para>
             </remarks>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.AttributeIds.UniversalAttributeId.BluetoothProfileDescriptorList">
             <summary>
             The BluetoothProfileDescriptorList attribute consists of a data element
             sequence in which each element is a profile descriptor that contains information
             about a Bluetooth profile to which the service represented by this service
             record conforms.
             [0x0009]
             </summary>
            <remarks>
             <para>[<c>Data Element Sequence</c>]</para>
             <para>&#x201C;
             The BluetoothProfileDescriptorList attribute consists of a data element
             sequence in which each element is a profile descriptor that contains information
             about a Bluetooth profile to which the service represented by this service
             record conforms. Each profile descriptor is a data element sequence whose
             first element is the UUID assigned to the profile and whose second element is
             a 16-bit profile version number.
             &#x201D;</para><para>&#x201C;
             Each version of a profile is assigned a 16-bit unsigned integer profile version
             number, which consists of two 8-bit fields. The higher-order 8 bits contain the
             major version number field and the lower-order 8 bits contain the minor version
             number field. The initial version of each profile has a major version of 1 and a
             minor version of 0. When upward compatible changes are made to the profile,
             the minor version number will be incremented. If incompatible changes are
             made to the profile, the major version number will be incremented.
             &#x201D;</para>
             </remarks>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.AttributeIds.UniversalAttributeId.DocumentationUrl">
             <summary>
             This attribute is a URL which points to documentation on the service described
             by a service record.
             [0x000A]
             </summary>
            <remarks>
             <para>[<c>URL</c>]</para>
             </remarks>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.AttributeIds.UniversalAttributeId.ClientExecutableUrl">
             <summary>
             This attribute contains a URL that refers to the location of an application that
             may be used to utilize the service described by the service record.
             [0x000B]
             </summary>
            <remarks>
             <para>[<c>URL</c>]</para>
             <para>&#x201C;
             This attribute contains a URL that refers to the location of an application that
             may be used to utilize the service described by the service record. Since different
             operating environments require different executable formats, a mechanism
             has been defined to allow this single attribute to be used to locate an executable
             that is appropriate for the client device’s operating environment. In the
             attribute value URL, the first byte with the value 0x2A (ASCII character ‘*’) is to
             be replaced by the client application with a string representing the desired
             operating environment before the URL is to be used.
             &#x201D;</para><para>&#x201C;
             The list of standardized strings representing operating environments is contained
             in the Bluetooth Assigned Numbers document.
             &#x201D;</para><para>&#x201C;
             For example, assume that the value of the ClientExecutableURL attribute is
             http://my.fake/public/*/client.exe. On a device capable of executing SH3 WindowsCE
             files, this URL would be changed to http://my.fake/public/sh3-
             microsoft-wince/client.exe. On a device capable of executing Windows 98 binaries,
             this URL would be changed to http://my.fake/public/i86-microsoft-win98/
             client.exe.
             &#x201D;</para>
             </remarks>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.AttributeIds.UniversalAttributeId.IconUrl">
             <summary>
             This attribute contains a URL that refers to the location of an icon that may be
             used to represent the service described by the service record.
             [0x000C]
             </summary>
            <remarks>
             <para>[<c>URL</c>]</para>
             <para>&#x201C;
             This attribute contains a URL that refers to the location of an icon that may be
             used to represent the service described by the service record. Since different
             hardware devices require different icon formats, a mechanism has been
             defined to allow this single attribute to be used to locate an icon that is appropriate
             for the client device. In the attribute value URL, the first byte with the
             value 0x2A (ASCII character ‘*’) is to be replaced by the client application with
             a string representing the desired icon format before the URL is to be used.
             &#x201D;</para><para>&#x201C;
             The list of standardized strings representing icon formats is contained in the
             Bluetooth Assigned Numbers document.
             &#x201D;</para><para>&#x201C;
             For example, assume that the value of the IconURL attribute is http://my.fake/
             public/icons/*. On a device that prefers 24 x 24 icons with 256 colors, this URL
             would be changed to http://my.fake/public/icons/24x24x8.png. On a device that
             prefers 10 x 10 monochrome icons, this URL would be changed to http://
             my.fake/public/icons/10x10x1.png.
             &#x201D;</para>
             </remarks>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.AttributeIds.UniversalAttributeId.ServiceName">
             <summary>
             The ServiceName attribute is a string containing the name of the service represented
             by a service record.
             [0x0000 + LangBaseAttrId]
             </summary>
            <remarks>
             <para>[<c>String</c>]</para>
             <para>&#x201C;
             The ServiceName attribute is a string containing the name of the service represented
             by a service record. It should be brief and suitable for display with an
             Icon representing the service. The offset 0x0000 must be added to the attribute
             ID base (contained in the LanguageBaseAttributeIDList attribute) in order to
             compute the attribute ID for this attribute.
             &#x201D;</para>
             </remarks>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.AttributeIds.UniversalAttributeId.ServiceDescription">
             <summary>
             This attribute is a string containing a brief description of the service.
             [0x0001 + LangBaseAttrId]
             </summary>
            <remarks>
             <para>[<c>String</c>]</para>
             <para>&#x201C;
             This attribute is a string containing a brief description of the service. It should
             be less than 200 characters in length. The offset 0x0001 must be added to the
             attribute ID base (contained in the LanguageBaseAttributeIDList attribute) in
             order to compute the attribute ID for this attribute.
             &#x201D;</para>
             </remarks>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.AttributeIds.UniversalAttributeId.ProviderName">
             <summary>
             This attribute is a string containing the name of the person or organization providing
             the service.
             [0x0002 + LangBaseAttrId]
             </summary>
            <remarks>
             <para>[<c>String</c>]</para>
             <para>&#x201C;
             This attribute is a string containing the name of the person or organization providing
             the service. The offset 0x0002 must be added to the attribute ID base
             (contained in the LanguageBaseAttributeIDList attribute) in order to compute
             the attribute ID for this attribute.
             &#x201D;</para>
             </remarks>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.AttributeIds.UniversalAttributeId.AdditionalProtocolDescriptorLists">
             <summary>
             The AdditionalProtocolDescriptorLists attribute supports services that 
             require more channels in addition to the service described in the ProtocolDescriptorList
             attribute.  It contains a sequence of ProtocolDescriptorList-elements.
             [0x000D]
             </summary>
            <remarks>
             <para>[<c>Data Element Sequence</c> or <c>Data Element Alternative</c>]</para>
             <para>Defined in Bluetooth version 2.1, SDP section 5.1.6.</para>
             <para>&#x201C;The AdditionalProtocolDescriptorLists attribute contains 
             a sequence of ProtocolDescriptorList-elements. Each element having the 
             same format as the <see cref="F:InTheHand.Net.Bluetooth.AttributeIds.UniversalAttributeId.ProtocolDescriptorList"/>
             described in section 5.1.5. The ordering of the elements is
             significant and should be specified and fixed in Profiles that make use of this
             attribute.</para>
             <para>&#x201D;The AdditionalProtocolDescriptorLists attribute supports services that require
             more channels in addition to the service described in Section 5.1.5 . If the AdditionalProtocolDescriptorLists
             attribute is included in a service record, the ProtocolDescriptorList
             attribute must be included.&#x201D;
             </para>
             </remarks>
        </member>
        <member name="T:InTheHand.Net.Bluetooth.AttributeIds.ServiceDiscoveryServerAttributeId">
            <summary>
            This service class describes service records that contain attributes of service
            discovery server itself.
            </summary>
            <remarks>
            <para>&#x201C;
            This service class describes service records that contain attributes of service
            discovery server itself. The attributes listed in this section are only valid if the
            ServiceClassIDList attribute contains the
            ServiceDiscoveryServerServiceClassID. Note that all of the universal attributes
            may be included in service records of the ServiceDiscoveryServer class.
            &#x201D;</para>
            <para>&#x201C;Attribute IDs in the range of 0x0202-0x02FF are reserved.&#x201D;</para>
            </remarks>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.AttributeIds.ServiceDiscoveryServerAttributeId.VersionNumberList">
             <summary>
             The VersionNumberList is a data element sequence in which each element of
             the sequence is a version number supported by the SDP server.
             </summary>
            <remarks>
             <para>[<c>Data Element Sequence</c>]</para>
             <para>&#x201C;
             The VersionNumberList is a data element sequence in which each element of
             the sequence is a version number supported by the SDP server.
             &#x201D;</para><para>&#x201C;
             A version number is a 16-bit unsigned integer consisting of two fields. The
             higher-order 8 bits contain the major version number field and the low-order 8
             bits contain the minor version number field. The initial version of SDP has a
             major version of 1 and a minor version of 0. When upward compatible changes
             are made to the protocol, the minor version number will be incremented. If
             incompatible changes are made to SDP, the major version number will be
             incremented. This guarantees that if a client and a server support a common
             major version number, they can communicate if each uses only features of the
             specification with a minor version number that is supported by both client and
             server.
             &#x201D;</para>
             </remarks>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.AttributeIds.ServiceDiscoveryServerAttributeId.ServiceDatabaseState">
             <summary>
             The ServiceDatabaseState is a 32-bit integer that is used to facilitate caching
             of service records.
             </summary>
            <remarks>
             <para>[<c>32-bit unsigned integer</c>]</para>
             <para>&#x201C;
             The ServiceDatabaseState is a 32-bit integer that is used to facilitate caching
             of service records. If this attribute exists, its value is guaranteed to change
             when any of the other service records are added to or deleted from the server's
             database. If this value has not changed since the last time a client queried its
             value, the client knows that a) none of the other service records maintained by
             the SDP server have been added or deleted; and b) any service record handles
             acquired from the server are still valid. A client should query this attribute's
             value when a connection to the server is established, prior to using any service
             record handles acquired during a previous connection.
             &#x201D;</para><para>&#x201C;
             Note that the ServiceDatabaseState attribute does not change when existing
             service records are modified, including the addition, removal, or modification of
             service attributes. A service record's ServiceRecordState attribute indicates
             when that service record is modified.
             &#x201D;</para>
             </remarks>
        </member>
        <member name="T:InTheHand.Net.Bluetooth.AttributeIds.BrowseGroupDescriptorAttributeId">
            <summary>
            This service class describes the ServiceRecord provided for each BrowseGroupDescriptor
             service offered on a Bluetooth device.
            </summary>
            <remarks>
            <para>&#x201C;
            This service class describes the ServiceRecord provided for each BrowseGroupDescriptor
             service offered on a Bluetooth device. The attributes listed in
            this section are only valid if the ServiceClassIDList attribute contains the BrowseGroupDescriptorServiceClassID.
            Note that all of the universal attributes may
            be included in service records of the BrowseGroupDescriptor class.
            &#x201D;</para>
            <para>&#x201C;Attribute IDs in the range of 0x0201-0x02FF are reserved.&#x201D;</para>
            </remarks>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.AttributeIds.BrowseGroupDescriptorAttributeId.GroupId">
             <summary>
             This attribute contains a UUID that can be used to locate services that are
             members of the browse group that this service record describes.
             </summary>
            <remarks>
             <para>[<c>UUID</c>]</para>
             </remarks>
        </member>
        <member name="T:InTheHand.Net.ObexListenerRequest">
            <summary>
            Describes an incoming OBEX request to an <see cref="T:InTheHand.Net.ObexListener"/> object.
            </summary>
        </member>
        <member name="M:InTheHand.Net.ObexListenerRequest.WriteFile(System.String)">
            <summary>
            Writes the body of the request to the specified file path.
            </summary>
            <param name="fileName">The filename (including the path) to write to.</param>
        </member>
        <member name="P:InTheHand.Net.ObexListenerRequest.ContentLength64">
            <summary>
            Gets the length of the body data included in the request.
            <para><b>New in v1.5.51015</b></para>
            </summary>
            <value>A long value that contains the value from the request's Length header.
            This value is -1 if the content length is not known.</value>
            <remarks>The Length header expresses the length, in bytes, of the body data that accompanies the request.</remarks>
        </member>
        <member name="P:InTheHand.Net.ObexListenerRequest.ContentType">
            <summary>
            Gets the MIME type of the body data included in the request.
            </summary>
            <value>A <see cref="T:System.String"/> that contains the text of the request's Type header.</value>
        </member>
        <member name="P:InTheHand.Net.ObexListenerRequest.Headers">
            <summary>
            Gets the collection of header name/value pairs sent in the request.
            </summary>
            <value>A <see cref="T:System.Net.WebHeaderCollection"/> that contains the OBEX headers included in the request.</value>
            <remarks>For a complete list of request headers, see the <see cref="T:InTheHand.Net.ObexHeader"/> enumeration.</remarks>
        </member>
        <member name="P:InTheHand.Net.ObexListenerRequest.LocalEndPoint">
            <summary>
            Get the device address and service to which the request is directed.
            </summary>
            -
            <remarks>
            The <see cref="T:System.Net.EndPoint"/> instance returned will be of the 
            subtype that matches the address family that the <see cref="T:InTheHand.Net.ObexListener"/> 
            is listening on.  For instance if the listener was created with 
            <see cref="T:InTheHand.Net.ObexTransport"/>.<see cref="F:InTheHand.Net.ObexTransport.Bluetooth"/>
            then the <see cref="T:System.Net.EndPoint"/> will be of type
            <see cref="T:InTheHand.Net.BluetoothEndPoint"/>, and similarly for 
            <see cref="T:InTheHand.Net.IrDAEndPoint"/> and
            <see cref="T:System.Net.IPEndPoint"/>.
            </remarks>
            -
            <seealso cref="P:InTheHand.Net.ObexListenerRequest.RemoteEndPoint"/>
        </member>
        <member name="P:InTheHand.Net.ObexListenerRequest.ObexMethod">
            <summary>
            Gets the method specified by the client.
            </summary>
            <remarks>Only PUT is supported in this version.</remarks>
        </member>
        <member name="P:InTheHand.Net.ObexListenerRequest.InputStream">
            <summary>
            Gets a stream that contains the body data sent by the client.
            </summary>
        </member>
        <member name="P:InTheHand.Net.ObexListenerRequest.ProtocolVersion">
            <summary>
            Gets the OBEX version used by the requesting client
            </summary>
        </member>
        <member name="P:InTheHand.Net.ObexListenerRequest.RawUrl">
            <summary>
            Gets the URL information (without the host and port) requested by the client.
            </summary>
            <value>A <see cref="T:System.String"/> that contains the raw URL for this request.</value>
        </member>
        <member name="P:InTheHand.Net.ObexListenerRequest.RemoteEndPoint">
            <summary>
            Gets the device address and service from which the request originated.
            </summary>
            -
            <remarks>
            The <see cref="T:System.Net.EndPoint"/> instance returned will be of the 
            subtype that matches the address family that the <see cref="T:InTheHand.Net.ObexListener"/> 
            is listening on.  For instance if the listener was created with 
            <see cref="T:InTheHand.Net.ObexTransport"/>.<see cref="F:InTheHand.Net.ObexTransport.Bluetooth"/>
            then the <see cref="T:System.Net.EndPoint"/> will be of type
            <see cref="T:InTheHand.Net.BluetoothEndPoint"/>, and similarly for 
            <see cref="T:InTheHand.Net.IrDAEndPoint"/> and
            <see cref="T:System.Net.IPEndPoint"/>.
            </remarks>
            -
            <example>
            C#
            <code lang="C#">
              ObexListener lsnr = new ObexListener(ObexTransport.Bluetooth)
              ... ...
              ObexListenerRequest olr = ...
              BluetoothEndPoint remoteEp = (BluetoothEndPoint)olr.RemoteEndPoint;
              BluetoothAddress remoteAddr = remoteEp.Address;
            </code>
            Visual Basic
            <code lang="VB.NET">
              Dim lsnr As New ObexListener(ObexTransport.IrDA)
              ... ...
              Dim olr As ObexListenerRequest = ...
              Dim remoteEp As IrDAEndPoint = CType(olr.RemoteEndPoint, IrDAEndPoint);
              Dim remoteAddr As IrDAAddress = remoteEp.Address;
            </code>
            </example>
            -
            <seealso cref="P:InTheHand.Net.ObexListenerRequest.LocalEndPoint"/>
        </member>
        <member name="P:InTheHand.Net.ObexListenerRequest.UserHostAddress">
            <summary>
            Gets the server address to which the request is directed.
            </summary>
        </member>
        <member name="P:InTheHand.Net.ObexListenerRequest.Url">
            <summary>
            Gets the <see cref="T:System.Uri"/> object requested by the client.
            </summary>
            <value>A <see cref="T:System.Uri"/> object that identifies the resource requested by the client.</value>
        </member>
        <member name="T:InTheHand.Net.IrDAAddress">
            <summary>
            Represents an IrDA device address.
            </summary>
        </member>
        <member name="M:InTheHand.Net.IrDAAddress.#ctor(System.Byte[])">
            <summary>
            Initializes a new instance of the <see cref="T:InTheHand.Net.IrDAAddress"/> class with the specified address.
            </summary>
            <param name="address">Address as 4 byte array.</param>
            <exception cref="T:System.ArgumentNullException"><paramref name="address"/> was null.</exception>
            <exception cref="T:System.ArgumentException"><paramref name="address"/> was not a 4 byte array.</exception>
        </member>
        <member name="M:InTheHand.Net.IrDAAddress.#ctor(System.Int32)">
            <summary>
            Initializes a new instance of the <see cref="T:InTheHand.Net.IrDAAddress"/> class with the specified address.
            </summary>
            <param name="address"><see cref="T:System.Int32"/> representation of the address.</param>
        </member>
        <member name="M:InTheHand.Net.IrDAAddress.ToInt32">
            <summary>
            Returns the IrDA address as an integer.
            </summary>
            -
            <returns>An <see cref="T:System.Int64"/>.</returns>
        </member>
        <member name="M:InTheHand.Net.IrDAAddress.ToByteArray">
            <summary>
            Returns the internal byte array.
            </summary>
            -
            <returns>An array of <see cref="T:System.Byte"/>.</returns>
        </member>
        <member name="M:InTheHand.Net.IrDAAddress.TryParse(System.String,InTheHand.Net.IrDAAddress@)">
            <summary>
            Converts the string representation of an address to it's <see cref="T:InTheHand.Net.IrDAAddress"/> equivalent.
            A return value indicates whether the operation succeeded.
            </summary>
            <param name="s">A string containing an address to convert.</param>
            <param name="result">When this method returns, contains the <see cref="T:InTheHand.Net.IrDAAddress"/> equivalent to the address contained in s, if the conversion succeeded, or null (Nothing in Visual Basic) if the conversion failed.
            The conversion fails if the s parameter is null or is not of the correct format.</param>
            <returns>true if s is a valid IrDA address; otherwise, false.</returns>
        </member>
        <member name="M:InTheHand.Net.IrDAAddress.Parse(System.String)">
            <summary>
            Converts the string representation of an IrDA address to a new <see cref="T:InTheHand.Net.IrDAAddress"/> instance.
            </summary>
            <param name="irdaString">A string containing an address to convert.</param>
            <returns>New <see cref="T:InTheHand.Net.IrDAAddress"/> instance.</returns>
            <remarks>Address must be specified in hex format optionally separated by the colon or period character e.g. 00000000, 00:00:00:00 or 00.00.00.00.</remarks>
            <exception cref="T:System.ArgumentNullException">irdaString is null.</exception>
            <exception cref="T:System.FormatException">irdaString is not a valid IrDA address.</exception>
        </member>
        <member name="M:InTheHand.Net.IrDAAddress.ToString">
            <summary>
            Converts the address to its equivalent string representation.
            </summary>
            <returns>The string representation of this instance.</returns>
        </member>
        <member name="M:InTheHand.Net.IrDAAddress.ToString(System.String)">
            <summary>
            Returns a <see cref="T:System.String"/> representation of the value of this <see cref="T:InTheHand.Net.IrDAAddress"/> instance, according to the provided format specifier.
            </summary>
            <param name="format">A single format specifier that indicates how to format the value of this Guid. The format parameter can be "N", "C" or "P". If format is null or the empty string (""), "N" is used.</param>
            <returns>A <see cref="T:System.String"/> representation of the value of this <see cref="T:InTheHand.Net.BluetoothAddress"/>.</returns>
            <remarks><list type="table">
            <listheader><term>Specifier</term><term>Format of Return Value </term></listheader>
            <item><term>N</term><term>8 digits: <para>XXXXXXXX</para></term></item>
            <item><term>C</term><term>8 digits separated by colons: <para>XX:XX:XX:XX</para></term></item>
            <item><term>P</term><term>8 digits separated by periods: <para>XX.XX.XX.XX</para></term></item>
            </list></remarks>
        </member>
        <member name="M:InTheHand.Net.IrDAAddress.Equals(System.Object)">
            <summary>
            Compares two <see cref="T:InTheHand.Net.IrDAAddress"/> instances for equality.
            </summary>
            -
            <param name="obj">The <see cref="T:InTheHand.Net.IrDAAddress"/>
            to compare with the current instance.
            </param>
            -
            <returns><c>true</c> if <paramref name="obj"/>
            is a <see cref="T:InTheHand.Net.IrDAAddress"/> and equal to the current instance;
            otherwise, <c>false</c>.
            </returns>
        </member>
        <member name="M:InTheHand.Net.IrDAAddress.GetHashCode">
            <summary>
            Returns the hash code for this instance.
            </summary>
            <returns>A hash code for the current object.</returns>
        </member>
        <member name="M:InTheHand.Net.IrDAAddress.op_Equality(InTheHand.Net.IrDAAddress,InTheHand.Net.IrDAAddress)">
            <summary>
            Returns an indication whether the values of two specified <see cref="T:InTheHand.Net.IrDAAddress"/> objects are equal.
            </summary>
            -
            <param name="x">A <see cref="T:InTheHand.Net.IrDAAddress"/> or <see langword="null"/>.</param>
            <param name="y">A <see cref="T:InTheHand.Net.IrDAAddress"/> or <see langword="null"/>.</param>
            -
            <returns><c>true</c> if the values of the two instance are equal;
            otherwise, <c>false</c>.
            </returns>
        </member>
        <member name="M:InTheHand.Net.IrDAAddress.op_Inequality(InTheHand.Net.IrDAAddress,InTheHand.Net.IrDAAddress)">
            <summary>
            Returns an indication whether the values of two specified <see cref="T:InTheHand.Net.IrDAAddress"/> objects are not equal.
            </summary>
            -
            <param name="x">A <see cref="T:InTheHand.Net.IrDAAddress"/> or <see langword="null"/>.</param>
            <param name="y">A <see cref="T:InTheHand.Net.IrDAAddress"/> or <see langword="null"/>.</param>
            -
            <returns><c>true</c> if the value of the two instance is different;
            otherwise, <c>false</c>.
            </returns>
        </member>
        <member name="F:InTheHand.Net.IrDAAddress.None">
            <summary>
            Provides a null IrDA address.
            </summary>
        </member>
        <member name="M:InTheHand.Net.IrDAAddress.System#IComparable#CompareTo(System.Object)">
            <summary>
            
            </summary>
            <param name="obj"></param>
            <returns></returns>
        </member>
        <member name="M:InTheHand.Net.IrDAAddress.ToString(System.String,System.IFormatProvider)">
            <summary>
            Returns a <see cref="T:System.String"/> representation of the value of this <see cref="T:InTheHand.Net.IrDAAddress"/> instance, according to the provided format specifier.
            </summary>
            <param name="format">A single format specifier that indicates how to format the value of this Guid. The format parameter can be "N", "C" or "P". If format is null or the empty string (""), "N" is used.</param>
            <param name="formatProvider">Ignored.</param>
            -
            <returns>A <see cref="T:System.String"/> representation of the value of this <see cref="T:InTheHand.Net.IrDAAddress"/>.</returns>
            -
            <remarks>See <see cref="M:InTheHand.Net.IrDAAddress.ToString(System.String)"/>
            for the possible format strings and their output.
            </remarks>
        </member>
        <member name="T:InTheHand.Net.Bluetooth.ServiceRecordUtilities">
            <summary>
            Utilities method working on SDP <see cref="T:InTheHand.Net.Bluetooth.ServiceRecord"/>s, for instance to
            produce a 'dump' of the record's contents.
            </summary>
            -
            <remarks>
            This class produces output like the following:
            <code lang="none">
            AttrId: 0x0000 -- ServiceRecordHandle
            UInt32: 0x0
            
            AttrId: 0x0001 -- ServiceClassIdList
            ElementSequence
                Uuid16: 0x1000 -- ServiceDiscoveryServer
            
            AttrId: 0x0004 -- ProtocolDescriptorList
            ElementSequence
                ElementSequence
                    Uuid16: 0x100 -- L2CapProtocol
                    UInt16: 0x1
                ElementSequence
                    Uuid16: 0x1 -- SdpProtocol
            ( ( L2Cap, PSM=Sdp ), ( Sdp ) )
            
            AttrId: 0x0005 -- BrowseGroupList
            ElementSequence
                Uuid16: 0x1002 -- PublicBrowseGroup
            
            AttrId: 0x0006 -- LanguageBaseAttributeIdList
            ElementSequence
                UInt16: 0x656E
                UInt16: 0x6A
                UInt16: 0x100
            
            AttrId: 0x0100 -- ServiceName
            TextString: [en] 'Service Discovery'
            
            AttrId: 0x0101 -- ServiceDescription
            TextString: [en] 'Publishes services to remote devices'
            
            AttrId: 0x0102 -- ProviderName
            TextString: [en] 'Microsoft'
            
            AttrId: 0x0200 -- VersionNumberList
            ElementSequence
                UInt16: 0x100
            
            AttrId: 0x0201 -- ServiceDatabaseState
            UInt32: 0x1
            </code>
            The Service Class Id names and Attribute Id names are looked up using 
            <see cref="M:InTheHand.Net.Bluetooth.BluetoothService.GetName(System.Guid)"/>/etc and
            <see cref="T:InTheHand.Net.Bluetooth.MapServiceClassToAttributeIdList"/>
            respectively.
            </remarks>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.ServiceRecordUtilities.DumpRaw(InTheHand.Net.Bluetooth.ServiceRecord)">
            <overloads>
            Produces a raw 'dump' of the given record, not including attribute names etc.
            </overloads>
            -
            <summary>
            Gets a string containing a raw 'dump' of the given record, not including attribute names etc.
            </summary>
            -
            <param name="record">A <see cref="T:InTheHand.Net.Bluetooth.ServiceRecord"/> to be dumped.</param>
            <returns>A <see cref="T:System.String"/> containing the 'dump' text.</returns>
            <seealso cref="M:InTheHand.Net.Bluetooth.ServiceRecordUtilities.DumpRaw(System.IO.TextWriter,InTheHand.Net.Bluetooth.ServiceRecord)"/>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.ServiceRecordUtilities.DumpRaw(System.IO.TextWriter,InTheHand.Net.Bluetooth.ServiceRecord)">
            <summary>
            Produce a raw 'dump' of the given record, not including attribute names etc, to the given
            <see cref="T:System.IO.TextWriter"/>.
            </summary>
            <param name="writer">A <see cref="T:System.IO.TextWriter"/> where the 'dump'
            text is to be written.</param>
            <param name="record">A <see cref="T:InTheHand.Net.Bluetooth.ServiceRecord"/> to be dumped.</param>
            <seealso cref="M:InTheHand.Net.Bluetooth.ServiceRecordUtilities.DumpRaw(InTheHand.Net.Bluetooth.ServiceRecord)"/>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.ServiceRecordUtilities.Dump(InTheHand.Net.Bluetooth.ServiceRecord,System.Type[])">
            <overloads>
            Produces a 'dump' of the given record, including attribute names etc.
            </overloads>
            --
            <summary>
            Gets a <see cref="T:System.String"/> containing a 'dump' of the given record, including attribute names etc.
            </summary>
            -
            <param name="record">A <see cref="T:InTheHand.Net.Bluetooth.ServiceRecord"/> to be dumped.</param>
            <param name="attributeIdEnumDefiningTypes">
            An optional array of <see cref="T:System.Type"/> specifing a set of Ids 
            for the attributes contained in this record.  See the 
            <see cref="M:InTheHand.Net.Bluetooth.ServiceRecordUtilities.Dump(System.IO.TextWriter,InTheHand.Net.Bluetooth.ServiceRecord,System.Type[])"/> 
            overload for more information.
            </param>
            -
            <returns>A <see cref="T:System.String"/> containing the 'dump' text.</returns>
            -
            <seealso cref="M:InTheHand.Net.Bluetooth.ServiceRecordUtilities.Dump(System.IO.TextWriter,InTheHand.Net.Bluetooth.ServiceRecord,System.Type[])"/>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.ServiceRecordUtilities.Dump(System.IO.TextWriter,InTheHand.Net.Bluetooth.ServiceRecord,System.Type[])">
            <summary>
            Produce a 'dump' of the given record, including attribute names etc to the given
            <see cref="T:System.IO.TextWriter"/>.
            </summary>
            -
            <remarks>
            <para>The system has built-in a set of mappings from Service Class to 
            its Attribute IDs. This is supplied by the 
            <see cref="T:InTheHand.Net.Bluetooth.MapServiceClassToAttributeIdList"/> class,
            and contains the Attribute IDs defined in the base SDP specification as 
            well as in Bluetooth Profiles specification e.g. ObjectPushProfile, Headset,
            Panu, etc.
            If however the record being decoded is a custom one then a set of extra 
            Attribute Id definitions can be supplied in the 
            <paramref name="attributeIdEnumDefiningTypes"/> parameter.
            The Attribute IDs for a particular Service Class 
            should be defined in a static class and the set of such classes should 
            be passed as their <see cref="T:System.Type"/> object. e.g.
            <code lang="C#">
            static class FooAttributeId
            {
                public const ServiceAttributeId BarName = (ServiceAttributeId)0x0300;
            }
            
            &#x2026;
                ServiceRecordUtilities.Dump(writer, myRecord, typeof(FooAttributeId));
            &#x2026;
            </code>
            </para>
            </remarks>
            -
            <param name="writer">A <see cref="T:System.IO.TextWriter"/> where the 'dump'
            text is to be written.</param>
            <param name="record">A <see cref="T:InTheHand.Net.Bluetooth.ServiceRecord"/> to be dumped.</param>
            <param name="attributeIdEnumDefiningTypes">
            An optional array of <see cref="T:System.Type"/> specifing a set of Ids 
            for the attributes contained in this record.  See the 
            </param>
            <seealso cref="M:InTheHand.Net.Bluetooth.ServiceRecordUtilities.Dump(InTheHand.Net.Bluetooth.ServiceRecord,System.Type[])"/>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.ServiceRecordUtilities.GuidToHackProtocolId(System.Guid,System.String@)">
            <summary>
            Attempt to get the name of the protocol,
            and optionally it's enum id if we handle it specially.
            </summary>
            -
            <param name="protocolGuid">The input.
            </param>
            <param name="protoStr">The protocol's name if known, or its
            Guid.ToString if not.
            We handle some explicitly, and otherwise we see if there's a
            matching value in BluetoothService that has its name suffixed "Protocol".
            </param>
            -
            <returns>The id as a <see cref="T:InTheHand.Net.Bluetooth.ServiceRecordUtilities.HackProtocolId"/>.
            We handle some explicitly,
            otherwise we see if its a UUID16 and convert it automatically,
            finally if neither we return <c>zero</c>.
            </returns>
        </member>
        <member name="T:InTheHand.Net.Bluetooth.ServiceAttributeId">
            <summary>
            A Service Attribute Id identifies each attribute within an SDP service record.
            </summary>
            -
            <remarks>
            <para>The content of the record for a particular service class is defined in the
            profile&#x2019;s specification along with the IDs it uses. The IDs for the 
            common standard services have beed defined here, as e.g. 
            <see cref="T:InTheHand.Net.Bluetooth.AttributeIds.ObexAttributeId"/>,
            <see cref="T:InTheHand.Net.Bluetooth.AttributeIds.BasicPrintingProfileAttributeId"/>,
            etc, see namespace <see cref="N:InTheHand.Net.Bluetooth.AttributeIds"/>.
            The Service Discovery profile itself defines IDs, some that can be used 
            in any record <see cref="T:InTheHand.Net.Bluetooth.AttributeIds.UniversalAttributeId"/>, 
            and others
            <see cref="T:InTheHand.Net.Bluetooth.AttributeIds.ServiceDiscoveryServerAttributeId"/>,
            and <see cref="T:InTheHand.Net.Bluetooth.AttributeIds.BrowseGroupDescriptorAttributeId"/>.
            </para>
            <para>Note that except for the attributes in the &#x201C;Universal&#x201D; category 
            the IDs are <i>not</i> unique, for instance the ID is 0x0200 for both 
            <see cref="F:InTheHand.Net.Bluetooth.AttributeIds.ServiceDiscoveryServerAttributeId.VersionNumberList"/>
            and <see cref="F:InTheHand.Net.Bluetooth.AttributeIds.BrowseGroupDescriptorAttributeId.GroupId"/>
            from <see cref="T:InTheHand.Net.Bluetooth.AttributeIds.ServiceDiscoveryServerAttributeId"/>
            and <see cref="T:InTheHand.Net.Bluetooth.AttributeIds.BrowseGroupDescriptorAttributeId"/>
            respectively.
            </para>
            </remarks>
        </member>
        <member name="T:InTheHand.Net.Bluetooth.AttributeIdLookup">
            <summary>
            Retrieves the name of the SDP Attribute ID with the given value in the
            specified Attribute ID class sets.  Implementing <see cref="T:System.Enum"/>-like
            behaviour.
            </summary>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.AttributeIdLookup.GetName(InTheHand.Net.Bluetooth.ServiceAttributeId,System.Type[])">
            <summary>
            Retrieves the name of the SDP Attribute ID with the given value in the
            specified Attribute ID class sets.
            </summary>
            -
            <remarks>
            Each particular service (ObexPushProfile, SerialPortProfile) etc defines
            its own SDP record content and the Attribute IDs are defined locally in
            each, and thus with values overlapping with other service specifications.
            Therefore for each profile we must define the set of Attribute IDs used, this
            is done by creating a class for each with the IDs defined as <c>const</c>
            member fields.
            </remarks>
            -
            <param name="id">
            The Attribute Id as an <see cref="T:InTheHand.Net.Bluetooth.ServiceAttributeId"/>
            </param>
            <param name="attributeIdDefiningClasses">
            The set of classes defining Attribute IDs for the service classed contained
            in the record containing this attribute id.
            </param>
            -
            <returns>
            A string containing the name of the Attribute ID whose numerical value is <paramref name="id"/>,
            or a null reference (<c>Nothing</c> in Visual Basic) if no such constant is found.
            </returns>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.AttributeIdLookup.GetName(InTheHand.Net.Bluetooth.ServiceAttributeId,System.Type[],InTheHand.Net.Bluetooth.LanguageBaseItem[],InTheHand.Net.Bluetooth.LanguageBaseItem@)">
            <summary>
            Retrieves the name of the SDP Attribute ID with the given value 
            and using one of the languages from the supplied LanguageBaseItem 
            in the specified AttributeID class sets.
            </summary>
            -
            <remarks>
            Each particular service (ObexPushProfile, SerialPortProfile) etc defines
            its own SDP record content and the Attribute IDs are defined locally in
            each, and thus with values overlapping with other service specifications.
            Therefore for each profile we must define the set of Attribute IDs used, this
            is done by creating a class for each with the IDs defined as <c>const</c>
            member fields.
            </remarks>
            -
            <param name="id">
            The Attribute Id as an <see cref="T:InTheHand.Net.Bluetooth.ServiceAttributeId"/>
            </param>
            <param name="attributeIdDefiningClasses">
            The set of classes defining Attribute IDs for the service classed contained
            in the record containing this attribute id.
            </param>
            <param name="langBaseList">
            The list of <see cref="T:InTheHand.Net.Bluetooth.LanguageBaseItem"/> applying 
            to the current record.  They are used when an attribute is marked as a
            multi-language one and thus need the base offset removed from the specified
            numerical value.
            </param>
            <param name="applicableLangBase">
            The applicable <see cref="T:InTheHand.Net.Bluetooth.LanguageBaseItem"/> if the 
            matched attribute is a multi-language one.  <see langword="null"/> 
            (<see langword="Nothing"/> in Visual Basic), if no attribute was matched
            or it was not a multi-language one.
            </param>
            -
            <returns>
            A string containing the name of the Attribute ID whose numerical value is <paramref name="id"/>,
            or a null reference (<c>Nothing</c> in Visual Basic) if no such constant is found.
            </returns>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.AttributeIdLookup._GetNameIfMatchesMultiLang(InTheHand.Net.Bluetooth.ServiceAttributeId,System.Reflection.FieldInfo,InTheHand.Net.Bluetooth.LanguageBaseItem[],InTheHand.Net.Bluetooth.LanguageBaseItem@)">
            <summary>
            Retrieves the name of the SDP Attribute ID with the given value 
            and using one of the languages from the supplied LanguageBaseItem 
            in the specified AttributeID class sets
            </summary>
        </member>
        <member name="T:InTheHand.Net.Bluetooth.StringWithLanguageBaseAttribute">
            <summary>
            Indicates that the field to which it is applied represents an SDP Attribute 
            that can exist in multiple language instances and thus has a language base 
            offset applied to its numerical ID when added to a record.
            </summary>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.StringWithLanguageBaseAttribute.#ctor">
            <summary>
            Initializes a new instance of the <see cref="T:InTheHand.Net.Bluetooth.StringWithLanguageBaseAttribute"/>
            class. 
            </summary>
        </member>
        <member name="T:InTheHand.Net.Bluetooth.BLUETOOTH_AUTHENTICATION_CALLBACK_PARAMS">
            <summary>
            The BLUETOOTH_AUTHENTICATION_CALLBACK_PARAMS structure contains specific configuration information about the Bluetooth device responding to an authentication request.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BLUETOOTH_AUTHENTICATION_CALLBACK_PARAMS.deviceInfo">
            <summary>
            A BLUETOOTH_DEVICE_INFO structure that contains information about a Bluetooth device.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BLUETOOTH_AUTHENTICATION_CALLBACK_PARAMS.authenticationMethod">
            <summary>
            A BLUETOOTH_AUTHENTICATION_METHOD enumeration that defines the authentication method utilized by the Bluetooth device.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BLUETOOTH_AUTHENTICATION_CALLBACK_PARAMS.ioCapability">
            <summary>
            A BLUETOOTH_IO_CAPABILITY enumeration that defines the input/output capabilities of the Bluetooth device.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BLUETOOTH_AUTHENTICATION_CALLBACK_PARAMS.authenticationRequirements">
            <summary>
            A AUTHENTICATION_REQUIREMENTS specifies the 'Man in the Middle' protection required for authentication.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BLUETOOTH_AUTHENTICATION_CALLBACK_PARAMS.Numeric_Value_Passkey">
            <summary>
            A ULONG value used for Numeric Comparison authentication.
            or
            A ULONG value used as the passkey used for authentication.
            </summary>
        </member>
        <member name="T:InTheHand.Net.Bluetooth.BLUETOOTH_PIN_INFO">
            <summary>
            The BLUETOOTH_PIN_INFO structure contains information used for authentication via PIN.
            </summary>
        </member>
        <member name="T:InTheHand.Net.Bluetooth.BLUETOOTH_OOB_DATA_INFO">
            <summary>
            The BLUETOOTH_OOB_DATA_INFO structure contains data used to authenticate prior to establishing an Out-of-Band device pairing.
            </summary>
        </member>
        <member name="T:InTheHand.Net.Bluetooth.Widcomm.WidcommBluetoothListener">
            <exclude/>
        </member>
        <member name="T:InTheHand.Net.Bluetooth.Factory.IBluetoothListener">
            <exclude/>
        </member>
        <member name="P:InTheHand.Net.Bluetooth.Widcomm.ISdpDiscoveryRecordsBuffer.RecordCount">
            <summary>
            Get the number of records that the buffer contains.
            </summary>
            -
            <value>An integer containing the number of records that the buffer contains,
            may be zero.
            </value>
            -
            <exception cref="T:System.InvalidOperationException">The buffer has 
            not yet been filled with a CSdpDiscoveryRec list.
            </exception>
            -
            <remarks>
            <para>In <see cref="F:InTheHand.Net.Bluetooth.Widcomm.SdpSearchScope.ServiceClassOnly">SdpSearchScope.ServiceClassOnly</see>
            this returns the actual number of records as the filtering is done by
            the stack.  In <see cref="F:InTheHand.Net.Bluetooth.Widcomm.SdpSearchScope.Anywhere">SdpSearchScope.Anywhere</see>
            this returns the pre-filtered number of records.  We do the filtering
            so this will likely be greater that the matching number of records.
            </para>
            </remarks>
        </member>
        <member name="P:InTheHand.Net.Bluetooth.Widcomm.SdpDiscoveryRecordsBuffer.RecordCount">
            <summary>
            Get the number of records that the buffer contains.
            </summary>
            -
            <value>An integer containing the number of records that the buffer contains,
            may be zero.
            </value>
            -
            <exception cref="T:System.InvalidOperationException">The buffer has 
            not yet been filled with a CSdpDiscoveryRec list.
            </exception>
            -
            <remarks>
            <para>In <see cref="F:InTheHand.Net.Bluetooth.Widcomm.SdpSearchScope.ServiceClassOnly">SdpSearchScope.ServiceClassOnly</see>
            this returns the actual number of records as the filtering is done by
            the stack.  In <see cref="F:InTheHand.Net.Bluetooth.Widcomm.SdpSearchScope.Anywhere">SdpSearchScope.Anywhere</see>
            this returns the pre-filtered number of records.  We do the filtering
            so this will likely be greater that the matching number of records.
            </para>
            </remarks>
        </member>
        <member name="T:InTheHand.TextWriterTraceListener32f">
            <summary>
            For use on NETCFv2
            </summary>
            -
            <inheritdoc/>
        </member>
        <member name="M:InTheHand.TextWriterTraceListener32f.#ctor(System.String)">
            <summary>
            Initializes a new instance of the <see cref="T:InTheHand.TextWriterTraceListener32f"/> class
            </summary>
            -
            <param name="filename">The filename of the log file to write to.
            Unlike the .NET supplied class this filename is relative to the
            folder that the calling assembly is located in.
            </param>
        </member>
        <member name="T:InTheHand.Net.ObexStatusCode">
            <summary>
            Specifies the status codes returned for an Object Exchange (OBEX) operation.
            </summary>
            <remarks>OBEX codes are directly related to their HTTP equivalents - see <see cref="T:System.Net.HttpStatusCode"/>.</remarks>
        </member>
        <member name="F:InTheHand.Net.ObexStatusCode.Final">
            <summary>
            Applied to another code to indicate this is the only response or final response in a series.
            </summary>
        </member>
        <member name="F:InTheHand.Net.ObexStatusCode.Continue">
            <summary>
            Equivalent to HTTP status 100.
            Continue indicates that the client can continue with its request.
            </summary>
        </member>
        <member name="F:InTheHand.Net.ObexStatusCode.OK">
            <summary>
            Equivalent to HTTP status 200.
            OK indicates that the request succeeded and that the requested information is in the response.
            This is the most common status code to receive.
            </summary>
        </member>
        <member name="F:InTheHand.Net.ObexStatusCode.Created">
            <summary>
            Equivalent to HTTP status 201.
            Created indicates that the request resulted in a new resource created before the response was sent. 
            </summary>
        </member>
        <member name="F:InTheHand.Net.ObexStatusCode.Accepted">
            <summary>
            Equivalent to HTTP status 202.
            Accepted indicates that the request has been accepted for further processing.
            </summary>
        </member>
        <member name="F:InTheHand.Net.ObexStatusCode.NonAuthorativeInformation">
            <summary>
            Equivalent to HTTP status 203.
            NonAuthoritativeInformation indicates that the returned metainformation is from a cached copy instead of the origin server and therefore may be incorrect.
            </summary>
        </member>
        <member name="F:InTheHand.Net.ObexStatusCode.NoContent">
            <summary>
            Equivalent to HTTP status 204.
            NoContent indicates that the request has been successfully processed and that the response is intentionally blank.
            </summary>
        </member>
        <member name="F:InTheHand.Net.ObexStatusCode.ResetContent">
            <summary>
            Equivalent to HTTP status 205.
            ResetContent indicates that the client should reset (not reload) the current resource.
            </summary>
        </member>
        <member name="F:InTheHand.Net.ObexStatusCode.PartialContent">
            <summary>
            Equivalent to HTTP status 206.
            PartialContent indicates that the response is a partial response as requested by a GET request that includes a byte range.
            </summary>
        </member>
        <member name="F:InTheHand.Net.ObexStatusCode.MultipleChoices">
            <summary>
            Equivalent to HTTP status 300.
            MultipleChoices indicates that the requested information has multiple representations.
            </summary>
        </member>
        <member name="F:InTheHand.Net.ObexStatusCode.MovedPermanently">
            <summary>
            Equivalent to HTTP status 301.
            MovedPermanently indicates that the requested information has been moved to the URI specified in the Location header.
            The default action when this status is received is to follow the Location header associated with the response.
            </summary>
        </member>
        <member name="F:InTheHand.Net.ObexStatusCode.MovedTemporarily">
            <summary>
            Equivalent to HTTP status 302.
            Redirect indicates that the requested information is located at the URI specified in the Location header.
            The default action when this status is received is to follow the Location header associated with the response.
            When the original request method was POST, the redirected request will use the GET method.
            </summary>
        </member>
        <member name="F:InTheHand.Net.ObexStatusCode.SeeOther">
            <summary>
            Equivalent to HTTP status 303.
            SeeOther automatically redirects the client to the URI specified in the Location header as the result of a POST. The request to the resource specified by the Location header will be made with a GET.
            </summary>
        </member>
        <member name="F:InTheHand.Net.ObexStatusCode.NotModified">
            <summary>
            Equivalent to HTTP status 304.
            NotModified indicates that the client's cached copy is up to date.
            The contents of the resource are not transferred.
            </summary>
        </member>
        <member name="F:InTheHand.Net.ObexStatusCode.UseProxy">
            <summary>
            Equivalent to HTTP status 305.
            UseProxy indicates that the request should use the proxy server at the URI specified in the Location header.
            </summary>
        </member>
        <member name="F:InTheHand.Net.ObexStatusCode.BadRequest">
             <summary>
             Equivalent to HTTP status 400.
             BadRequest indicates that the request could not be understood by the server. BadRequest is sent when no other error is applicable, or if the exact error is unknown or does not have its own error code. 
            
             <see cref="T:InTheHand.Net.ObexWebRequest"/> reports errors through 
             <see cref="P:InTheHand.Net.ObexWebResponse.StatusCode">ObexWebResponse.StatusCode</see>,
             this status code is overloaded by it to report failure to connect to the server.
             </summary>
        </member>
        <member name="F:InTheHand.Net.ObexStatusCode.Unauthorized">
            <summary>
            Equivalent to HTTP status 401.
            Unauthorized indicates that the requested resource requires authentication. The WWW-Authenticate header contains the details of how to perform the authentication.
            </summary>
        </member>
        <member name="F:InTheHand.Net.ObexStatusCode.PaymentRequired">
            <summary>
            Equivalent to HTTP status 402.
            PaymentRequired is reserved for future use.
            </summary>
        </member>
        <member name="F:InTheHand.Net.ObexStatusCode.Forbidden">
            <summary>
            Equivalent to HTTP status 403.
            Forbidden indicates that the server refuses to fulfill the request.
            </summary>
        </member>
        <member name="F:InTheHand.Net.ObexStatusCode.NotFound">
            <summary>
            Equivalent to HTTP status 404.
            NotFound indicates that the requested resource does not exist on the server.
            </summary>
        </member>
        <member name="F:InTheHand.Net.ObexStatusCode.MethodNotAllowed">
            <summary>
            Equivalent to HTTP status 405.
            MethodNotAllowed indicates that the request method (POST or GET) is not allowed on the requested resource.
            </summary>
        </member>
        <member name="F:InTheHand.Net.ObexStatusCode.NotAcceptable">
            <summary>
            Equivalent to HTTP status 406.
            NotAcceptable indicates that the client has indicated with Accept headers that it will not accept any of the available representations of the resource.
            </summary>
        </member>
        <member name="F:InTheHand.Net.ObexStatusCode.ProxyAuthenticationRequired">
            <summary>
            Equivalent to HTTP status 407.
            ProxyAuthenticationRequired indicates that the requested proxy requires authentication.
            The Proxy-authenticate header contains the details of how to perform the authentication.
            </summary>
        </member>
        <member name="F:InTheHand.Net.ObexStatusCode.RequestTimeout">
            <summary>
            Equivalent to HTTP status 408.
            RequestTimeout indicates that the client did not send a request within the time the server was expecting the request.
            </summary>
        </member>
        <member name="F:InTheHand.Net.ObexStatusCode.Conflict">
            <summary>
            Equivalent to HTTP status 409.
            Conflict indicates that the request could not be carried out because of a conflict on the server.
            </summary>
        </member>
        <member name="F:InTheHand.Net.ObexStatusCode.Gone">
            <summary>
            Equivalent to HTTP status 410.
            Gone indicates that the requested resource is no longer available.
            </summary>
        </member>
        <member name="F:InTheHand.Net.ObexStatusCode.LengthRequired">
            <summary>
            Equivalent to HTTP status 411.
            LengthRequired indicates that the required Content-length header is missing.
            </summary>
        </member>
        <member name="F:InTheHand.Net.ObexStatusCode.PreconditionFailed">
            <summary>
            Equivalent to HTTP status 412.
            PreconditionFailed indicates that a condition set for this request failed, and the request cannot be carried out.
            Conditions are set with conditional request headers like If-Match, If-None-Match, or If-Unmodified-Since.
            </summary>
        </member>
        <member name="F:InTheHand.Net.ObexStatusCode.RequestedEntityTooLarge">
            <summary>
            Equivalent to HTTP status 413.
            RequestEntityTooLarge indicates that the request is too large for the server to process.
            </summary>
        </member>
        <member name="F:InTheHand.Net.ObexStatusCode.RequestedUrlTooLarge">
            <summary>
            Equivalent to HTTP status 414.
            RequestUriTooLong indicates that the URI is too long.
            </summary>
        </member>
        <member name="F:InTheHand.Net.ObexStatusCode.UnsupportedMediaType">
            <summary>
            Equivalent to HTTP status 415.
            UnsupportedMediaType indicates that the request is an unsupported type.
            </summary>
        </member>
        <member name="F:InTheHand.Net.ObexStatusCode.InternalServerError">
            <summary>
            Equivalent to HTTP status 500.
            InternalServerError indicates that a generic error has occurred on the server.
            
            <see cref="T:InTheHand.Net.ObexWebRequest"/> reports errors through 
            <see cref="P:InTheHand.Net.ObexWebResponse.StatusCode">ObexWebResponse.StatusCode</see>,
            this status code is used by it to report failure to send the object.
            </summary>
        </member>
        <member name="F:InTheHand.Net.ObexStatusCode.NotImplemented">
            <summary>
            Equivalent to HTTP status 501.
            NotImplemented indicates that the server does not support the requested function.
            </summary>
        </member>
        <member name="F:InTheHand.Net.ObexStatusCode.BadGateway">
            <summary>
            Equivalent to HTTP status 502.
            BadGateway indicates that an intermediate proxy server received a bad response from another proxy or the origin server.
            </summary>
        </member>
        <member name="F:InTheHand.Net.ObexStatusCode.ServiceUnavailable">
            <summary>
            Equivalent to HTTP status 503.
            ServiceUnavailable indicates that the server is temporarily unavailable, usually due to high load or maintenance.
            </summary>
        </member>
        <member name="F:InTheHand.Net.ObexStatusCode.GatewayTimeout">
            <summary>
            Equivalent to HTTP status 504.
            GatewayTimeout indicates that an intermediate proxy server timed out while waiting for a response from another proxy or the origin server.
            </summary>
        </member>
        <member name="F:InTheHand.Net.ObexStatusCode.HttpVersionNotSupported">
            <summary>
            Equivalent to HTTP status 505.
            HttpVersionNotSupported indicates that the requested HTTP version is not supported by the server.
            </summary>
        </member>
        <member name="F:InTheHand.Net.ObexStatusCode.DatabaseFull">
            <summary>
            
            </summary>
        </member>
        <member name="F:InTheHand.Net.ObexStatusCode.DatabaseLocked">
            <summary>
            
            </summary>
        </member>
        <member name="T:InTheHand.Net.BluetoothEndPoint">
            <summary>
            Represents a network endpoint as a Bluetooth address and 
            a Service Class Id and/or a port number.
            </summary>
            -
            <remarks>
            <para>The BluetoothEndPoint class contains the host, service class id and port 
            information needed by an application to connect to a service on a host.
            By combining the host's Bluetooth address and class id or port number, 
            the BluetoothEndPoint class forms a connection point to a service.
            </para>
            <para>When used for instance when connecting with <see cref="T:InTheHand.Net.Sockets.BluetoothClient"/>, 
            if the port is specified then the connection is made to that port, 
            otherwise a SDP lookup is done for a record with the class specified in 
            the <see cref="P:InTheHand.Net.BluetoothEndPoint.Service"/> property.
            </para>
            </remarks>
        </member>
        <member name="F:InTheHand.Net.BluetoothEndPoint.MinPort">
            <summary>
            Specifies the minimum value that can be assigned to the Port property.
            </summary>
        </member>
        <member name="F:InTheHand.Net.BluetoothEndPoint.MaxPort">
            <summary>
            Specifies the maximum value that can be assigned to the Port property.
            </summary>
        </member>
        <member name="F:InTheHand.Net.BluetoothEndPoint.MinScn">
            <summary>
            The minimum valid Server Channel Number, 1.
            </summary>
            <remarks>
            <para>
            Bluetooth's rfcomm.pdf: Part F:1 -- RFCOMM with TS 07.10 -- Serial Port Emulation
            </para>
            <para>
            Section 5.4:
            </para>
            <list type="table">
               &#x201C;The RFCOMM server channel number is a [five-bit field].
               Server applications registering with an RFCOMM service interface are assigned a
               Server Channel number in the range 1…30. [0 and 31 should not be used since
               the corresponding DLCIs are reserved in TS 07.10]&#x201D;
            </list>
            </remarks>
        </member>
        <member name="F:InTheHand.Net.BluetoothEndPoint.MaxScn">
            <summary>
            The maximum valid Server Channel Number, 30.
            </summary>
            <remarks><see cref="F:InTheHand.Net.BluetoothEndPoint.MinScn"/>
            </remarks>
        </member>
        <member name="M:InTheHand.Net.BluetoothEndPoint.#ctor(InTheHand.Net.BluetoothAddress,System.Guid)">
            <summary>
            Initializes a new instance of the <see cref="T:InTheHand.Net.BluetoothEndPoint"/> class with the specified address and service.
            </summary>
            <param name="address">The Bluetooth address of the device. A six byte array.</param>
            <param name="service">The Bluetooth service to use.</param>
        </member>
        <member name="M:InTheHand.Net.BluetoothEndPoint.#ctor(InTheHand.Net.BluetoothAddress,System.Guid,System.Int32)">
            <summary>
            Initializes a new instance of the <see cref="T:InTheHand.Net.BluetoothEndPoint"/> class with the specified address, service and port number.
            </summary>
            <param name="address">The Bluetooth address of the device. A six byte array.</param>
            <param name="service">The Bluetooth service to use.</param>
            <param name="port">Radio channel to use, -1 for any.</param>
            -
            <remarks>
            <para>See the <see cref="T:InTheHand.Net.BluetoothEndPoint"/> documentation for 
            how the combination of Service and Port are used when connecting with 
            BluetoothClient.
            </para>
            </remarks>
        </member>
        <member name="M:InTheHand.Net.BluetoothEndPoint.Serialize">
            <summary>
            Serializes endpoint information into a <see cref="T:System.Net.SocketAddress"/> instance.
            </summary>
            <returns>A <see cref="T:System.Net.SocketAddress"/> instance containing the socket address for the endpoint.</returns>
        </member>
        <member name="M:InTheHand.Net.BluetoothEndPoint.Create(System.Net.SocketAddress)">
            <summary>
            Creates an endpoint from a socket address.
            </summary>
            <param name="socketAddress">The <see cref="T:System.Net.SocketAddress"/> to use for the endpoint.</param>
            <returns>An <see cref="T:System.Net.EndPoint"/> instance using the specified socket address.</returns>
        </member>
        <member name="M:InTheHand.Net.BluetoothEndPoint.Equals(System.Object)">
            <summary>
            Compares two <see cref="T:InTheHand.Net.BluetoothEndPoint"/> instances for equality.
            </summary>
            -
            <param name="obj">The <see cref="T:InTheHand.Net.BluetoothEndPoint"/>
            to compare with the current instance.
            </param>
            -
            <returns><c>true</c> if <paramref name="obj"/>
            is a <see cref="T:InTheHand.Net.BluetoothEndPoint"/> and equal to the current instance;
            otherwise, <c>false</c>.
            </returns>
        </member>
        <member name="M:InTheHand.Net.BluetoothEndPoint.GetHashCode">
            <summary>
            Returns the hash code for this instance.
            </summary>
            <returns>A hash code for the current object.</returns>
        </member>
        <member name="M:InTheHand.Net.BluetoothEndPoint.ToString">
            <summary>
            Returns the string representation of the BluetoothEndPoint.
            </summary>
            <remarks>
            <para>
            We try to follow existing examples where possible; JSR-82 and similar
            use a URI of the form:</para>
            <code lang="none">bluetooth://xxxxxxxxxxxx:xx</code>
            or:
            <code lang="none">bluetooth://xxxxxxxxxxxx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx</code>
            or in some serialport only situations:
            <code lang="none">btspp://</code>
            <para>So we follow that pattern here, but of course without the URI prefix.
            If the form with the URI is required then the prefix can simply be appended.</para>
            <para>
            If the port is non default then we use that, otherwise just the full guid.
            </para>
            <para>Some examples are:</para>
            To the ObexObjectPush service:
            <code lang="none">"04E2030405F6:0000110500001000800000805f9b34fb"</code>
            To the SerialPort service:
            <code lang="none">"04E2030405F6:0000110100001000800000805f9b34fb"</code>
            With an Empty service GUID:
            <code lang="none">"04E2030405F6:00000000000000000000000000000000"</code>
            With port 9:
            <code lang="none">"04E2030405F6:9"</code>
            </remarks>
            <returns>The string representation of the BluetoothEndPoint.</returns>
        </member>
        <member name="M:InTheHand.Net.BluetoothEndPoint.Clone">
            <summary>
            Creates a copy of the <see cref="T:InTheHand.Net.BluetoothEndPoint"/>.
            </summary>
            <remarks>Creates a copy including of the internal <see cref="T:InTheHand.Net.BluetoothAddress"/>
            </remarks>
            <returns>A copy of the <see cref="T:InTheHand.Net.BluetoothEndPoint"/>.
            </returns>
        </member>
        <member name="P:InTheHand.Net.BluetoothEndPoint.AddressFamily">
            <summary>
            Gets the address family of the Bluetooth address. 
            </summary>
        </member>
        <member name="P:InTheHand.Net.BluetoothEndPoint.Address">
            <summary>
            Gets or sets the Bluetooth address of the endpoint.
            </summary>
            <seealso cref="T:InTheHand.Net.BluetoothAddress"/>
        </member>
        <member name="P:InTheHand.Net.BluetoothEndPoint.Service">
            <summary>
            Gets or sets the Bluetooth service to use for the connection.
            </summary>
            <seealso cref="T:InTheHand.Net.Bluetooth.BluetoothService"/>
        </member>
        <member name="P:InTheHand.Net.BluetoothEndPoint.Port">
            <summary>
            Gets or sets the service channel number of the endpoint.
            </summary>
        </member>
        <member name="P:InTheHand.Net.BluetoothEndPoint.HasPort">
            <summary>
            Gets whether a <see cref="P:InTheHand.Net.BluetoothEndPoint.Port"/> is set.
            </summary>
        </member>
        <member name="T:InTheHand.Net.Sockets.BluetoothProtocolType">
            <summary>
            Specifies additional protocols that the <see cref="T:System.Net.Sockets.Socket"/> class supports.
            </summary>
            <remarks>
            <para>These constants are defined by the Bluetooth SIG - <see href="https://www.bluetooth.org/Technical/AssignedNumbers/service_discovery.htm"/>
            </para>
            </remarks>
        </member>
        <member name="F:InTheHand.Net.Sockets.BluetoothProtocolType.Sdp">
            <summary>
            Service Discovery Protocol (bt-sdp)
            </summary>
        </member>
        <member name="F:InTheHand.Net.Sockets.BluetoothProtocolType.RFComm">
            <summary>
            Bluetooth RFComm protocol (bt-rfcomm)
            </summary>
        </member>
        <member name="F:InTheHand.Net.Sockets.BluetoothProtocolType.L2Cap">
            <summary>
            Logical Link Control and Adaptation Protocol (bt-l2cap)
            </summary>
        </member>
        <member name="T:InTheHand.Net.Sockets.BluetoothDeviceInfo">
            <summary>
            Provides information about an available device obtained by the client during device discovery.
            </summary>
        </member>
        <member name="M:InTheHand.Net.Sockets.BluetoothDeviceInfo.#ctor(InTheHand.Net.BluetoothAddress)">
            <summary>
            Initializes an instance of the <see cref="T:InTheHand.Net.Sockets.BluetoothDeviceInfo"/> class 
            for the device with the given address.
            </summary>
            -
            <param name="address">The <see cref="T:InTheHand.Net.BluetoothAddress"/>.</param>
        </member>
        <member name="M:InTheHand.Net.Sockets.BluetoothDeviceInfo.Refresh">
            <summary>
            Forces the system to refresh the device information.
            </summary>
            -
            <remarks>
            See <see cref="P:InTheHand.Net.Sockets.BluetoothDeviceInfo.DeviceName"/>
            for one reason why this method is necessary.
            </remarks>
        </member>
        <member name="M:InTheHand.Net.Sockets.BluetoothDeviceInfo.Update">
            <summary>
            Updates the device name used to display the device, affects the local computer cache.
            </summary>
            <remarks>On Windows CE this only affects devices which are already paired.</remarks>
        </member>
        <member name="M:InTheHand.Net.Sockets.BluetoothDeviceInfo.SetServiceState(System.Guid,System.Boolean)">
             <summary>
             Enables or disables services for a Bluetooth device.
             </summary>
             <param name="service">The service GUID on the remote device.</param>
             <param name="state">Service state - TRUE to enable the service, FALSE to disable it.</param>
             <remarks>
             When called on Windows CE, the device will require a soft-reset to enabled the settings.
             
            <note>
             <para>The system maintains a mapping of service guids to supported drivers for
             Bluetooth-enabled devices. Enabling a service installs the corresponding
             device driver. Disabling a service removes the corresponding device driver.
             If a non-supported service is enabled, a driver will not be installed.
             </para>
             </note>
             <para>This overload is silent on error; the other overload raises an exception
             if required
             (<see cref="M:InTheHand.Net.Sockets.BluetoothDeviceInfo.SetServiceState(System.Guid,System.Boolean,System.Boolean)"/>).
             </para>
             </remarks>
             -
             <exception cref="T:System.PlatformNotSupportedException">
             Thrown if this method is called on Windows CE platforms.</exception>
        </member>
        <member name="M:InTheHand.Net.Sockets.BluetoothDeviceInfo.SetServiceState(System.Guid,System.Boolean,System.Boolean)">
             <summary>
             Enables or disables services for a Bluetooth device.
             </summary>
             <param name="service">The service GUID on the remote device.</param>
             <param name="state">Service state - TRUE to enable the service, FALSE to disable it.</param>
             <param name="throwOnError">Whether the method should raise an exception
             when 
             </param>
             <remarks>
             When called on Windows CE, the device will require a soft-reset to enabled the settings.
            <note>
             <para>The system maintains a mapping of service guids to supported drivers for
             Bluetooth-enabled devices. Enabling a service installs the corresponding
             device driver. Disabling a service removes the corresponding device driver.
             If a non-supported service is enabled, a driver will not be installed.
             </para>
             </note>
             </remarks>
             -
             <exception cref="T:System.ComponentModel.Win32Exception">The call failed.
             </exception>
        </member>
        <member name="M:InTheHand.Net.Sockets.BluetoothDeviceInfo.GetServiceRecords(System.Guid)">
            <summary>
            Run an SDP query on the device&#x2019;s Service Discovery Database.
            </summary>
            -
            <remarks>
            <para>
            For instance to see whether the device has an an Serial Port service
            search for UUID <see cref="F:InTheHand.Net.Bluetooth.BluetoothService.SerialPort"/>,
            or too find all the services that use RFCOMM use 
            <see cref="F:InTheHand.Net.Bluetooth.BluetoothService.RFCommProtocol"/>,
            or all the services use 
            <see cref="F:InTheHand.Net.Bluetooth.BluetoothService.L2CapProtocol"/>.
            </para>
            <para>
            If the device isn&#x2019;t accessible a <see cref="T:System.Net.Sockets.SocketException"/>
            with <see cref="P:System.Net.Sockets.SocketException.ErrorCode"/>
            10108 (0x277C) occurs.
            </para>
            </remarks>
            -
            <param name="service">The UUID to search for, as a <see cref="T:System.Guid"/>.
            </param>
            -
            <returns>The parsed record as an 
            <see cref="T:InTheHand.Net.Bluetooth.ServiceRecord"/>.
            </returns>
            -
            <example>
            <code lang="VB.NET">
            Dim bdi As BluetoothDeviceInfo = ...
            Dim records As ServiceRecord() = bdi.GetServiceRecords(BluetoothService.RFCommProtocol)
            ' Dump each to console
            For Each curRecord As ServiceRecord In records
               ServiceRecordUtilities.Dump(Console.Out, curRecord)
            Next
            </code>
            </example>
            
            -
            <exception cref="T:System.Net.Sockets.SocketException">
            The query failed.
            </exception>
        </member>
        <member name="M:InTheHand.Net.Sockets.BluetoothDeviceInfo.BeginGetServiceRecords(System.Guid,System.AsyncCallback,System.Object)">
            <summary>
            Begins an asynchronous Service Record lookup query.
            </summary>
            -
            <param name="service">See <see cref="M:InTheHand.Net.Sockets.BluetoothDeviceInfo.GetServiceRecords(System.Guid)"/>.
            </param>
            <param name="callback">An optional asynchronous callback, to be called 
            when the query is complete.
            </param>
            <param name="state">A user-provided object that distinguishes this 
            particular asynchronous Service Record lookup query from other requests.
            </param>
            -
            <returns>An <see cref="T:System.IAsyncResult"/> that represents the 
            asynchronous Service Record lookup query, which could still be pending.
            </returns>
        </member>
        <member name="M:InTheHand.Net.Sockets.BluetoothDeviceInfo.EndGetServiceRecords(System.IAsyncResult)">
            <summary>
            Ends an asynchronous Service Record lookup query.
            </summary>
            -
            <param name="asyncResult">An <see cref="T:System.IAsyncResult"/>
            object that was obtained when the asynchronous operation was started.
            </param>
            -
            <returns>The parsed record as an 
            <see cref="T:InTheHand.Net.Bluetooth.ServiceRecord"/>.
            </returns>
        </member>
        <member name="M:InTheHand.Net.Sockets.BluetoothDeviceInfo.GetServiceRecordsUnparsed(System.Guid)">
            <summary>
            Run an SDP query on the device&#x2019;s Service Discovery Database,
            returning the raw byte rather than a parsed record.
            </summary>
            -
            <remarks>
            If the device isn&#x2019;t accessible a <see cref="T:System.Net.Sockets.SocketException"/>
            with <see cref="P:System.Net.Sockets.SocketException.ErrorCode"/>
            10108 (0x277C) occurs.
            </remarks>
            -
            <param name="service">The UUID to search for, as a <see cref="T:System.Guid"/>.
            </param>
            -
            <returns>An array of array of <see cref="T:System.Byte"/>.</returns>
            -
            <exception cref="T:System.Net.Sockets.SocketException">
            The query failed.
            </exception>
        </member>
        <member name="M:InTheHand.Net.Sockets.BluetoothDeviceInfo.GetVersions">
            <summary>
            Gets the radio version and manufacturer information for the device.
            Needs a connection to the device.
            </summary>
            -
            <remarks>
            <para>Includes information such as the LMP versions, supported
            features and the manufacturer of the radio/Bluetooth Controller.
            </para>
            <para>If the device is not connected this information cannot be
            obtained; an error will occur if there is no connection.
            The values will be cached until <see cref="M:InTheHand.Net.Sockets.BluetoothDeviceInfo.Refresh"/> is called.
            </para>
            <para>This feature is currently supported only on the
            Microsoft Bluetooth stack on both desktop Windows and Windows
            Mobile. However Windows XP does not provide this information.
            Implementation is possible on some of the other Bluetooth stacks
            and will depend on demand/support for the user community.
            </para>
            </remarks>
            -
            <exception cref="T:System.ComponentModel.Win32Exception">
            An error occurred, desktop Windows returns error code
            1167 ERROR_DEVICE_NOT_CONNECTED and Windows Mobile returns error code
            1168 ERROR_NOT_FOUND.
            Windows XP which does not support this functionality returns error code
            2 ERROR_FILE_NOT_FOUND.
            </exception>
            <exception cref="T:System.NotImplementedException">
            Not yet implemented.
            </exception>
            <exception cref="T:System.NotSupportedException">
            This stack does not support getting this information.
            </exception>
            -
            <returns>The radio version etc information as a
            <see cref="T:InTheHand.Net.Bluetooth.RadioVersions"/> instance.
            </returns>
        </member>
        <member name="M:InTheHand.Net.Sockets.BluetoothDeviceInfo.ShowDialog">
            <summary>
            Displays information about the device.
            </summary>
        </member>
        <member name="M:InTheHand.Net.Sockets.BluetoothDeviceInfo.Equals(System.Object)">
            <summary>
            Compares two <see cref="T:InTheHand.Net.Sockets.BluetoothDeviceInfo"/> instances for equality.
            </summary>
            -
            <param name="obj">The <see cref="T:InTheHand.Net.Sockets.BluetoothDeviceInfo"/>
            to compare with the current instance.
            </param>
            -
            <returns><c>true</c> if <paramref name="obj"/>
            is a <see cref="T:InTheHand.Net.Sockets.BluetoothDeviceInfo"/> and equal to the current instance;
            otherwise, <c>false</c>.
            </returns>
        </member>
        <member name="M:InTheHand.Net.Sockets.BluetoothDeviceInfo.IsAMsftInternalType(System.Object)">
            <summary>
            E.g. used internally by WPF.
            </summary>
            <param name="obj"></param>
            <returns></returns>
        </member>
        <member name="M:InTheHand.Net.Sockets.BluetoothDeviceInfo.GetHashCode">
            <summary>
            Returns the hash code for this instance. 
            </summary>
            <returns>A hash code for the current object.</returns>
        </member>
        <member name="P:InTheHand.Net.Sockets.BluetoothDeviceInfo.DeviceAddress">
            <summary>
            Gets the device identifier.
            </summary>
        </member>
        <member name="P:InTheHand.Net.Sockets.BluetoothDeviceInfo.DeviceName">
            <summary>
            Gets a name of a device.
            </summary>
            -
            <remarks>
            <para>Note, that due the way in which Bluetooth device discovery works,
            the existence and address of a device is known first, but a separate
            query has to be carried out to find whether the device also has a name.
            This means that if a device is discovered afresh then this property might
            return only a text version of the device&#x2019;s address and not its
            name, one can also see this in the Windows&#x2019; Bluetooth device dialogs
            where the device appears first with its address and the name is later
            updated.  To see the name, wait for some time and access this property again
            having called <see cref="M:InTheHand.Net.Sockets.BluetoothDeviceInfo.Refresh"/>
            in the meantime.
            </para>
            </remarks>
        </member>
        <member name="P:InTheHand.Net.Sockets.BluetoothDeviceInfo.ClassOfDevice">
            <summary>
            Returns the Class of Device of the remote device.
            </summary>
            -
            <remarks>
            <para>
            Some CE 4.2 devices such as original PPC2003 devices don't have the native 
            API on which this property depends &#x2014; it was added as part of a hotfix. 
            The property will always return zero in such a case.  On WM/CE we also 
            attempt to get the CoD value as part of the discovery process; this is 
            of course only works for devices in-range.
            </para>
            </remarks>
        </member>
        <member name="P:InTheHand.Net.Sockets.BluetoothDeviceInfo.Rssi">
            <summary>
            Returns the signal strength for the Bluetooth connection with the peer device.
            <para><b>Supports only on some platforms.</b></para>
            </summary>
            -
            <value>Valid values for this property are -128 to 128.  It returns
            <see cref="F:System.Int32.MinValue">Int32.MinValue</see> on failure.
            </value>
            -
            <remarks>
            <para>Thus there are multiple reasons which this property can return
            the error value (i.e. <see cref="F:System.Int32.MinValue">Int32.MinValue</see>).
            </para>
            <list type="number">
            <item>On an unsupported platform, e.g. MSFT+Win32, or MSFT+CE/WM on an
            older version.  See below.
            </item>
            <item>The remote device is not turned-on or in range.  See below.
            </item>
            <item>On Widcomm, there is no connection to the remote device.  See below.
            </item>
            </list>
            
            <para>Platform support:</para>
            <list type="bullet">
            <item>Does <b>not</b> work on Win32 with the Microsoft Bluetooth stack.
            That platform provide no support for RSSI, please contact Microsoft
            to complain.
            </item>
            <item>Works on Windows Mobile 5.0, Windows Embedded CE 6.0, or later
            versions.
            </item>
            <item>Works on Widcomm, both platforms.
            We will <i>not</i> try to connect, see below.
            </item>
            </list>
            <para>
            </para>
            
            <para>Finally, to get an RSSI value Bluetooth requires an open
            connection to the peer device.
            On Widcomm we will <i>not</i> attempt to connect, so the caller must
            ensure that there's a connection --
            perhaps it could call <see cref="M:InTheHand.Net.Sockets.BluetoothDeviceInfo.GetServiceRecords(System.Guid)"/>
            just before accessing this property.
            On CE/WM if there is no active connection, then we will attempt to
            create one.  This of course <i>can</i> be <i>slow</i>, and <i>will</i>
            be slow if the remote device is not in range.
            (Bluetooth 2.1 supports getting the RSSI value at discovery time which
            might provide the solution for many cases.  However only the MSFT+Win32
            stack specifically supports v2.1, and of course it doesn't support RSSI
            at all!)
            </para>
            <para>Note that the Bluetooth specification doesn't require that the
            radio hardware provides any great precision in its RSSI readings.
            The spec says for instance, in v2.1 Volume 2 Part E ("HCI") Section 7.5.4:
            &#x201C;Note: how accurate the dB values will be depends on the Bluetooth hardware.
            The only requirements for the hardware are that the Bluetooth device is able to
            tell whether the RSSI is inside, above or below the Golden Device Power Range.&#x201D;
            </para>
            </remarks>
        </member>
        <member name="P:InTheHand.Net.Sockets.BluetoothDeviceInfo.InstalledServices">
            <summary>
            Returns a list of services which are already installed for use on the calling machine.
            </summary>
            <remarks>
            <para>This property returns the services already configured for use. 
            Those are the ones that are checked in the &#x201C;Services&#x201D; tab
            of the device&#x2019;s property sheet in the Bluetooth Control panel.
            I presume the behaviour is similar on CE.
            </para>
            <para>Will only return available services for paired devices.
            </para>
            <para>It of course will also only returns standard system services which Windows understands.
            (On desktop Windows this method calls the OS function <c>BluetoothEnumerateInstalledServices</c>).
            </para>
            <para>To see all the services that a device advertises use the 
            <see cref="M:InTheHand.Net.Sockets.BluetoothDeviceInfo.GetServiceRecords(System.Guid)"/>
            method.
            </para>
            </remarks>
        </member>
        <member name="P:InTheHand.Net.Sockets.BluetoothDeviceInfo.Connected">
            <summary>
            Specifies whether the device is connected.
            </summary>
            <remarks>Not supported under Windows CE and will always return false.</remarks>
            <seealso cref="P:InTheHand.Net.Sockets.BluetoothDeviceInfo.Remembered"/>
            <seealso cref="P:InTheHand.Net.Sockets.BluetoothDeviceInfo.Authenticated"/>
        </member>
        <member name="P:InTheHand.Net.Sockets.BluetoothDeviceInfo.Remembered">
            <summary>
            Specifies whether the device is a remembered device. Not all remembered devices are authenticated.
            </summary>
            -
            <remarks>Now supported under Windows CE — will return the same as 
            <see cref="P:InTheHand.Net.Sockets.BluetoothDeviceInfo.Authenticated"/>.
            </remarks>
            <seealso cref="P:InTheHand.Net.Sockets.BluetoothDeviceInfo.Connected"/>
            <seealso cref="P:InTheHand.Net.Sockets.BluetoothDeviceInfo.Authenticated"/>
        </member>
        <member name="P:InTheHand.Net.Sockets.BluetoothDeviceInfo.Authenticated">
            <summary>
            Specifies whether the device is authenticated, paired, or bonded. All authenticated devices are remembered.
            </summary>
            <remarks>Is now supported on both CE and XP.</remarks>
            <seealso cref="P:InTheHand.Net.Sockets.BluetoothDeviceInfo.Connected"/>
            <seealso cref="P:InTheHand.Net.Sockets.BluetoothDeviceInfo.Remembered"/>
        </member>
        <member name="P:InTheHand.Net.Sockets.BluetoothDeviceInfo.LastSeen">
            <summary>
            Date and Time this device was last seen by the system.
            </summary>
            -
            <remarks><para>Is set by the Inquiry (Device Discovery) process on
            the stacks where we handle Inquiry directly &#x2014; that is
            every platform except the Microsoft stack on Win32 (MSFT+Win32),
            so is supported under MSFT+WM, Widcomm, Bluetopia, etc, etc.
            </para>
            <para>This value is supported on Windows 7 with the Microsoft stack.
            It it not supported on earlier Win32 versions as the native 
            API has a bug.  The value provided is always simply the current 
            time, e.g. after a discovery for every device returned this value has 
            the time of the discovery operation.  Tracked by workitem 
            <see href="http://www.codeplex.com/32feet/WorkItem/View.aspx?WorkItemId=10280">10280</see>.
            </para>
            </remarks>
            -
            <value>
            An instance of <see cref="T:System.DateTime"/> containing the time in UTC,
            or <c>DateTime</c>.<see cref="F:System.DateTime.MinValue"/>
            if there's no value.
            </value>
        </member>
        <member name="P:InTheHand.Net.Sockets.BluetoothDeviceInfo.LastUsed">
            <summary>
            Date and Time this device was last used by the system.
            </summary>
            -
            <remarks>
            <para>Not supported on most stacks: Widcomm, Bluetopia, MSFT+WM 
            and will return <see cref="F:System.DateTime.MinValue">DateTime.MinValue</see>
            </para>
            <para>Is supported on Windows 7 with the Microsoft stack.  Is not
            supported on earlier Win32 versions &#x2014; there it just always
            returns the current time, see <see cref="P:InTheHand.Net.Sockets.BluetoothDeviceInfo.LastSeen"/>.
            </para>
            </remarks>
            -
            <value>
            An instance of <see cref="T:System.DateTime"/> containing the time in UTC,
            or <c>DateTime</c>.<see cref="F:System.DateTime.MinValue"/> 
            if there's no value.
            </value>
        </member>
        <member name="T:InTheHand.Net.Bluetooth.ServiceElement">
             <summary>
             Holds an SDP data element.
             </summary>
             -
             <remarks>
             <para>A Service Element hold the data in a SDP Service Record.  It can 
             hold various types of data, being like the &#x2018;variant&#x2019; type in some
             environments.  Each <see cref="T:InTheHand.Net.Bluetooth.ServiceAttribute"/> in
             a <see cref="T:InTheHand.Net.Bluetooth.ServiceRecord"/> holds its content in a
             Service Element.
             </para>
             <para>The types currently defined in the Service Discovery specification
             include unsigned and signed integers 
             of various sizes (8-bit, 16-bit etc), UUIDs in the full 128-bit form or
             in the 16 and 32-bit forms, TextString, Url etc.  An element can itself
             also contain a list of element, either as a &#x2018;sequence&#x2019; or an
             &#x2018;alternative&#x2019;, and thus an attribute can contain a tree of values,
             e.g. as used by the 
             <see cref="F:InTheHand.Net.Bluetooth.AttributeIds.UniversalAttributeId.ProtocolDescriptorList"/>
             attribute.
             </para>
             <para>The type that an element is holding can be accessed with the 
             <see cref="P:InTheHand.Net.Bluetooth.ServiceElement.ElementTypeDescriptor"/> and 
             <see cref="P:InTheHand.Net.Bluetooth.ServiceElement.ElementType"/> properties which
             are of type <see cref="T:InTheHand.Net.Bluetooth.ElementTypeDescriptor"/> and
             <see cref="T:InTheHand.Net.Bluetooth.ElementType"/> respectively, the former being 
             the &#x2018;major&#x2019; type e.g. 
             <see cref="F:InTheHand.Net.Bluetooth.ElementTypeDescriptor.UnsignedInteger"/>, and
             the latter the &#x2018;minor&#x2019; type e.g. 
             <see cref="F:InTheHand.Net.Bluetooth.ElementType.UInt16"/>.
             </para>
             <para>The element's value can be accessed in various ways, either directly 
             in its internal form through its <see cref="P:InTheHand.Net.Bluetooth.ServiceElement.Value"/>
             property.  It has return type <see cref="T:System.Object"/> so the value 
             will have to be cast before use, see the <c>UInt16</c> example below.  There
             are also a number of type-specific methods, e.g. 
             <see cref="M:InTheHand.Net.Bluetooth.ServiceElement.GetValueAsElementArray"/>,
             <see cref="M:InTheHand.Net.Bluetooth.ServiceElement.GetValueAsUuid"/>, 
             <see cref="M:InTheHand.Net.Bluetooth.ServiceElement.GetValueAsString(System.Text.Encoding)"/>
             etc.  Each will throw an <see cref="T:System.InvalidOperationException"/>
             if the element is not of a suitable type.  The complete set is:</para>
             <list type="table">
             <listheader><term><see cref="T:InTheHand.Net.Bluetooth.ElementType"/></term>
             <description>Access method, or .NET Type for direct access</description>
             </listheader>
             <item><term><c>Nil</c></term>
             <description><see langword="null"/></description></item>
             
             <item><term><c>Uint8</c></term><description><see cref="T:System.Byte"/></description></item>
             <item><term><c>Uint16</c></term><description><see cref="T:System.UInt16"/></description></item>
             <item><term><c>Uint32</c></term><description><see cref="T:System.UInt32"/></description></item>
             <item><term><c>Uint64</c></term><description>Currently unsupported.</description></item>
             <item><term><c>Uint128</c></term><description>Currently unsupported.</description></item>
             
             <item><term><c>Int8</c></term><description><see cref="T:System.SByte"/></description></item>
             <item><term><c>Int16</c></term><description><see cref="T:System.Int16"/></description></item>
             <item><term><c>Int32</c></term><description><see cref="T:System.Int32"/></description></item>
             <item><term><c>Int64</c></term><description>Currently unsupported.</description></item>
             <item><term><c>Int128</c></term><description>Currently unsupported.</description></item>
            
             <item><term><c>Uuid16</c></term><description>Via <see cref="M:InTheHand.Net.Bluetooth.ServiceElement.GetValueAsUuid"/>, or as <see cref="T:System.UInt16"/></description></item>
             <item><term><c>Uuid32</c></term><description>Via <see cref="M:InTheHand.Net.Bluetooth.ServiceElement.GetValueAsUuid"/>, or as <see cref="T:System.UInt16"/></description></item>
             <item><term><c>Uuid128</c></term><description>Via <see cref="M:InTheHand.Net.Bluetooth.ServiceElement.GetValueAsUuid"/></description></item>
             
             <item><term><c>TextString</c></term><description>With 
             <see cref="M:InTheHand.Net.Bluetooth.ServiceElement.GetValueAsString(System.Text.Encoding)"/>
             or <see cref="M:InTheHand.Net.Bluetooth.ServiceElement.GetValueAsStringUtf8"/> etc.
             The underlying value can be an array of bytes, or as a <see cref="T:System.String"/>
             the <see cref="T:InTheHand.Net.Bluetooth.ServiceRecordParser"/> will set an
             array of bytes, whereas a manually created record will likely contain a
             <see cref="T:System.String"/>.
             </description></item>
             
             <item><term><c>Boolean</c></term><description><see cref="T:System.Boolean"/></description></item>
             
             <item><term><c>ElementSequence</c></term><description>With
             <see cref="M:InTheHand.Net.Bluetooth.ServiceElement.GetValueAsElementArray"/> or
             <see cref="M:InTheHand.Net.Bluetooth.ServiceElement.GetValueAsElementList"/>
             </description></item>
             <item><term><c>ElementSequence</c></term><description>-"-</description></item>
            
             <item><term><c>Url</c></term><description>Via <see cref="M:InTheHand.Net.Bluetooth.ServiceElement.GetValueAsUri"/>,
             can be stored interally as <see cref="T:System.Uri"/> or as an array of bytes
             </description></item>
             </list>
             
             <para>Note that there are no access 
             methods for the numeric type for instance so the 
             <see cref="P:InTheHand.Net.Bluetooth.ServiceElement.Value"/> property will have
             to be used e.g.
             <code lang="C#">
             // ElementType is UInt16
             ushort x = (ushort)element.Value;
             </code>
             or
             <code lang="C#">
             // ElementType is UInt16
             Dim x As UShort = CUShort(element.Value);
             </code>
             </para>
             <para>Additional type-specific methods can be added as required, in fact the 
             full set of 19+ could be added, it just requires implementation and test&#x2026;
             </para>
             </remarks>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.ServiceElement.ErrorMsgNotUuidType">
            <exclude/>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.ServiceElement.ErrorMsgNotTextStringType">
            <exclude/>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.ServiceElement.ErrorMsgNotUrlType">
            <exclude/>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.ServiceElement.ErrorMsgNotSeqAltType">
            <exclude/>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.ServiceElement.ErrorMsgSeqAltTypeNeedElementArray">
            <exclude/>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.ServiceElement.ErrorMsgFmtCreateNumericalGivenNonNumber">
            <exclude/>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.ServiceElement.ErrorMsgListContainsNotElement">
            <exclude/>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.ServiceElement.#ctor(InTheHand.Net.Bluetooth.ElementType,System.Object)">
             <overloads>
             Initializes a new instance of the <see cref="T:InTheHand.Net.Bluetooth.ServiceElement"/> class.
             </overloads>
             -
             <summary>
             Initializes a new instance of the <see cref="T:InTheHand.Net.Bluetooth.ServiceElement"/> class.
             </summary>
             -
             <remarks>
             <para>The type of the object passed in the <paramref name="value"/> parameter
             <strong>must</strong> suit the type of the element.  For instance if the element type is 
             <see cref="F:InTheHand.Net.Bluetooth.ElementType.UInt8"/> then the object
             passed in must be a <see cref="T:System.Byte"/>, if the element type is
             <see cref="F:InTheHand.Net.Bluetooth.ElementType.TextString"/> then the object
             must either be a <see cref="T:System.String"/> or the string encoded as 
             an array of <see cref="T:System.Byte"/>, 
             and if the element type is <see cref="F:InTheHand.Net.Bluetooth.ElementType.Uuid16"/>
             then the object passed in must be a <see cref="T:System.UInt16"/>,
             etc.
             For the full list of types see the class level documentation 
             (<see cref="T:InTheHand.Net.Bluetooth.ServiceElement"/>).
             </para>
             <para>For numerical element types the 
             <see cref="M:InTheHand.Net.Bluetooth.ServiceElement.CreateNumericalServiceElement(InTheHand.Net.Bluetooth.ElementType,System.Object)"/>
             factory method will accept any integer type and attempt to convert it to the 
             required type before creating the <see cref="T:InTheHand.Net.Bluetooth.ServiceElement"/>,
             for example for element type <see cref="F:InTheHand.Net.Bluetooth.ElementType.UInt8"/> 
             it will accept an <see cref="T:System.Int32"/> parameter and convert
             it to a <see cref="T:System.Byte"/> internally.
             </para>
             </remarks>
             -
             <param name="type">The type of the element as an ElementType.
             </param>
             <param name="value">The value for the new element,
             <strong>must</strong> suit the type of the element.
             See the remarks for more information.
             </param>
             -
             <example>
             <code lang="C#">
             ServiceElement e
             e = new ServiceElement(ElementType.TextString, "Hello world");
             e = new ServiceElement(ElementType.TextString, new byte[] { (byte)'h', (byte)'i', });
             e = new ServiceElement(ElementType.Uuid16, (UInt16)0x1101);
            
            
             int i = 10;
             int j = -1;
             
             // Error, Int32 not suitable for element type UInt8.
             ServiceElement e0 = new ServiceElement(ElementType.UInt8, i);
             
             // Success, Byte value 10 stored.
             ServiceElement e1 = ServiceElement.CreateNumericalServiceElement(ElementType.UInt8, i);
             
             // Error, -1 not in range of type Byte.
             ServiceElement e2 = ServiceElement.CreateNumericalServiceElement(ElementType.UInt8, j);
             </code>
             </example>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.ServiceElement.#ctor(InTheHand.Net.Bluetooth.ElementType,System.Collections.Generic.IList{InTheHand.Net.Bluetooth.ServiceElement})">
            <summary>
            Initializes a new instance of the <see cref="T:InTheHand.Net.Bluetooth.ServiceElement"/> class.
            </summary>
            -
            <param name="type">The type of the element as an ElementType.
            Should be either <c>ElementSequence</c>/<c>ElementAlternative</c> types.
            </param>
            <param name="childElements">A list of elements.
            </param>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.ServiceElement.#ctor(InTheHand.Net.Bluetooth.ElementType,InTheHand.Net.Bluetooth.ServiceElement[])">
            <summary>
            Initializes a new instance of the <see cref="T:InTheHand.Net.Bluetooth.ServiceElement"/> class.
            </summary>
            -
            <param name="type">The type of the element as an ElementType.
            Should be either <c>ElementSequence</c>/<c>ElementAlternative</c> types.
            </param>
            <param name="childElements">A list of elements.
            </param>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.ServiceElement.#ctor(InTheHand.Net.Bluetooth.ElementTypeDescriptor,InTheHand.Net.Bluetooth.ElementType,System.Object)">
            <summary>
            Obsolete, use <see cref="M:InTheHand.Net.Bluetooth.ServiceElement.#ctor(InTheHand.Net.Bluetooth.ElementType,System.Object)"/> instead.
            Initializes a new instance of the <see cref="T:InTheHand.Net.Bluetooth.ServiceElement"/> class.
            </summary>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.ServiceElement.CreateNumericalServiceElement(InTheHand.Net.Bluetooth.ElementType,System.Object)">
            <summary>
            Create an instance of <see cref="T:InTheHand.Net.Bluetooth.ServiceElement"/>
            but internally converting the numeric value to the required type.
            </summary>
            -
            <remarks>
            <para>As noted in the constructor documentation 
            (<see cref="M:InTheHand.Net.Bluetooth.ServiceElement.#ctor(InTheHand.Net.Bluetooth.ElementType,System.Object)"/>)
            the type of the value supplied <strong>must</strong> exactly match the element's natural type,
            the contructor will return an error if that is not the case. This method 
            will instead attempt to convert the value to the required type.  It uses 
            the <see cref="T:System.IConvertible"/> interface to do the conversion, for
            instance if the element type is <c>Uint16</c> then it will cast the input value
            to <see cref="T:System.IConvertible"/> and call 
            <see cref="M:System.IConvertible.ToUInt16(System.IFormatProvider)"/> on it.
            If the value is not convertible to the element type then an 
            <see cref="T:System.ArgumentOutOfRangeException"/> will be thrown see below.
            </para>
            <para>For instance, passing in an C# <c>int</c> / Visual Basic <c>Integer</c>
            to the constructor will fail for element types <see cref="F:InTheHand.Net.Bluetooth.ElementType.UInt8"/>
            etc, however by using this method it will succeed if the value is in the
            correct range.
            For example
            <code lang="C#">
            int i = 10;
            int j = -1;
            
            // Error, Int32 not suitable for element type UInt8.
            ServiceElement e0 = new ServiceElement(ElementType.UInt8, i);
            
            // Success, Byte value 10 stored.
            ServiceElement e1 = ServiceElement.CreateNumericalServiceElement(ElementType.UInt8, i);
            
            // Error, -1 not in range of type Byte.
            ServiceElement e2 = ServiceElement.CreateNumericalServiceElement(ElementType.UInt8, j);
            </code>
            The last example failing with:
            <code lang="none">
            System.ArgumentOutOfRangeException: Value '-1'  of type 'System.Int32' not valid for element type UInt16.
             ---> System.OverflowException: Value was either too large or too small for a UInt16.
               at System.Convert.ToUInt16(Int32 value)
               at System.Int32.System.IConvertible.ToUInt16(IFormatProvider provider)
               at InTheHand.Net.Bluetooth.ServiceElement.ConvertNumericalValue(ElementType elementType, Object value)
               --- End of inner exception stack trace ---
               at InTheHand.Net.Bluetooth.ServiceElement.ConvertNumericalValue(ElementType elementType, Object value)
               at InTheHand.Net.Bluetooth.ServiceElement.CreateNumericalServiceElement(ElementType elementType, Object value)
               at MiscFeatureTestCs.Main(String[] args)
            </code>
            </para>
            </remarks>
            -
            <param name="elementType">The type of the element as an ElementType.
            Should be one of the <c>UnsignedInteger</c>/<c>TwosComplementInteger</c> types.
            </param>
            <param name="value">The value for the new element,
            should be a numerical type.
            </param>
            -
            <returns>The new element.
            </returns>
            -
            <exception cref="T:System.ArgumentException">
            The <paramref name="elementType"/> is not a numerical type.
            </exception>
            <exception cref="T:System.ArgumentOutOfRangeException">
            The value wasn&#x2019;t convertible to the required type, e.g. if -1 is
            passed for element type UInt8, as shown above.
            </exception>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.ServiceElement.GetValueAsElementList">
            <summary>
            Gets the value as a list of <see cref="T:InTheHand.Net.Bluetooth.ServiceElement"/>.
            </summary>
            -
            <returns>The list of elements as an list.
            </returns>
            -
            <exception cref="T:System.InvalidOperationException">
            The service element is not of type
            <c>ElementType</c>.<see cref="F:InTheHand.Net.Bluetooth.ElementType.ElementSequence"/>
            or <see cref="F:InTheHand.Net.Bluetooth.ElementType.ElementAlternative"/>.
            </exception>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.ServiceElement.GetValueAsElementArray">
            <summary>
            Gets the value as a array of <see cref="T:InTheHand.Net.Bluetooth.ServiceElement"/>.
            </summary>
            -
            <returns>The list of elements as an array.
            </returns>
            -
            <exception cref="T:System.InvalidOperationException">
            The service element is not of type
            <c>ElementType</c>.<see cref="F:InTheHand.Net.Bluetooth.ElementType.ElementSequence"/>
            or <see cref="F:InTheHand.Net.Bluetooth.ElementType.ElementAlternative"/>.
            </exception>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.ServiceElement.GetValueAsUri">
            <summary>
            Gets the value as a <see cref="T:System.Uri"/>.
            </summary>
            -
            <returns>The Url value as a <see cref="T:System.Uri"/>.
            </returns>
            -
            <remarks>
            <para>It turns out that we can't trust vendors to add only valid
            URLs to their records, for instance the iPhone has an attribute
            with value "www.apple.com" which isn't a URL as it has no scheme
            part (http://) etc.
            </para>
            <para>Thus a Url value in an element can be stored in a number of
            formats.  If created by the parser then it will be stored as a 
            <see cref="T:System.String"/> or as an array of
            <see cref="T:System.Byte"/> if property
            <see cref="P:InTheHand.Net.Bluetooth.ServiceRecordParser.LazyUrlCreation">ServiceRecordParser.LazyUrlCreation</see>
            is set.  If created locally it can be those types or also 
            <see cref="T:System.Uri"/> .
            </para>
            <para>This method will try to convert from those formats to <see cref="T:System.Uri"/>.
            If the URL is invalid e.g. has bad characters or is missing the scheme
            part etc then an error will occur.  One can instead access the
            element's <see cref="P:InTheHand.Net.Bluetooth.ServiceElement.Value"/>
            property and expect one of the three types.  When created by the 
            parser it will be of type <see cref="T:System.String"/> unless 
            <see cref="P:InTheHand.Net.Bluetooth.ServiceRecordParser.LazyUrlCreation"/>
            is set.
            </para>
            </remarks>
            -
            <exception cref="T:System.InvalidOperationException">
            The service element is not of type
            <c>ElementType</c>.<see cref="F:InTheHand.Net.Bluetooth.ElementType.Url"/>.
            </exception>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.ServiceElement.GetValueAsUuid">
            <summary>
            Gets the value as a <see cref="T:System.Guid"/>.
            </summary>
            -
            <returns>The UUID value as a <see cref="T:System.Guid"/>.
            </returns>
            -
            <exception cref="T:System.InvalidOperationException">
            The service element is not of type
            <c>ElementType</c>.<see cref="F:InTheHand.Net.Bluetooth.ElementType.Uuid128"/>.
            </exception>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.ServiceElement.GetValueAsString(System.Text.Encoding)">
            <summary>
            Get the value of the <see cref="F:InTheHand.Net.Bluetooth.ElementTypeDescriptor.TextString"/>,
            where it is encoded using the given encoding form.
            </summary>
            -
            <param name="encoding">The <see cref="T:System.Text.Encoding"/>
            object to be used to decode the string value
            if it has been read as a raw byte array.
            </param>
            -
            <returns>
            A <see cref="T:System.String"/> holding the value of the 
            <see cref="F:InTheHand.Net.Bluetooth.ElementTypeDescriptor.TextString"/>
            from the service element.
            </returns>
            -
            <exception cref="T:System.InvalidOperationException">
            The service element is not of type 
            <see cref="F:InTheHand.Net.Bluetooth.ElementTypeDescriptor.TextString"/>.
            </exception>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.ServiceElement.GetValueAsString(InTheHand.Net.Bluetooth.LanguageBaseItem)">
            <summary>
            Get the value of the <see cref="F:InTheHand.Net.Bluetooth.ElementTypeDescriptor.TextString"/>,
            when it is encoded as specified by the given IETF Charset identifer.
            </summary>
            -
            <remarks>
            Note that a strict decoding of the string is carried out 
            (except on the NETCF where it is not supported). 
            Thus if the value is not in the specified encoding, or has been
            encoded incorrectly, then an error will occur.
            </remarks>
            -
            <returns>
            A <see cref="T:System.String"/> holding the value of the 
            <see cref="F:InTheHand.Net.Bluetooth.ElementTypeDescriptor.TextString"/>
            from the service element.
            </returns>
            -
            <exception cref="T:System.InvalidOperationException">
            The service element is not of type 
            <see cref="F:InTheHand.Net.Bluetooth.ElementTypeDescriptor.TextString"/>.
            </exception>
            <exception cref="T:System.Text.DecoderFallbackException">
            If the value in the service element is not a valid string in the given encoding.
            </exception>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.ServiceElement.GetValueAsStringUtf8">
            <summary>
            Get the value of the <see cref="F:InTheHand.Net.Bluetooth.ElementTypeDescriptor.TextString"/>,
            when it is encoded as UTF-8.
            </summary>
            -
            <remarks>
            Note: a strict decoding is used.
            Thus if the value is not in UTF-8 encoding or has been
            encoded incorrectly an error will occur.
            </remarks>
            -
            <returns>
            A <see cref="T:System.String"/> holding the value of the 
            <see cref="F:InTheHand.Net.Bluetooth.ElementTypeDescriptor.TextString"/>
            from the service element.
            </returns>
            -
            <exception cref="T:System.Text.DecoderFallbackException">
            If the value in the service element is not a valid string in the given encoding.
            On NETCF, an <see cref="T:System.ArgumentException"/> is thrown; not that
            <see cref="T:System.ArgumentException"/> is the base class of the
            <see cref="T:System.Text.DecoderFallbackException"/> exception.
            </exception>
            <exception cref="T:System.InvalidOperationException">
            The service element is not of type 
            <see cref="F:InTheHand.Net.Bluetooth.ElementTypeDescriptor.TextString"/>.
            </exception>
        </member>
        <member name="P:InTheHand.Net.Bluetooth.ServiceElement.ElementType">
            <summary>
            Gets the type of the element as an <see cref="T:InTheHand.Net.Bluetooth.ElementType"/>.
            </summary>
        </member>
        <member name="P:InTheHand.Net.Bluetooth.ServiceElement.ElementTypeDescriptor">
            <summary>
            Gets the SDP Element Type Descriptor of the element
            as an <see cref="T:InTheHand.Net.Bluetooth.ElementTypeDescriptor"/>.
            </summary>
        </member>
        <member name="P:InTheHand.Net.Bluetooth.ServiceElement.Value">
            <summary>
            Gets the value of the element as the .NET type it is stored as.
            </summary>
            <remarks>
            In most cases the type-specific property should be used instead, e.g 
            <see cref="M:InTheHand.Net.Bluetooth.ServiceElement.GetValueAsElementList"/>, 
            <see cref="M:InTheHand.Net.Bluetooth.ServiceElement.GetValueAsUri"/>, 
            <see cref="M:InTheHand.Net.Bluetooth.ServiceElement.GetValueAsUuid"/>, etc.
            </remarks>
        </member>
        <member name="T:InTheHand.Net.Bluetooth.MapServiceClassToAttributeIdList">
            <summary>
            Gets a list of enum-like classes containing SDP Service Attribute Id definitions 
            for a particular Service Class.
            </summary>
            -
            <remarks>
            See method 
            <see cref="M:InTheHand.Net.Bluetooth.MapServiceClassToAttributeIdList.GetAttributeIdEnumTypes(InTheHand.Net.Bluetooth.ServiceRecord)"/>.
            </remarks>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.MapServiceClassToAttributeIdList.#ctor">
            <summary>
            Initializes a new instance of the <see cref="T:InTheHand.Net.Bluetooth.MapServiceClassToAttributeIdList"/> class.
            </summary>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.MapServiceClassToAttributeIdList.GetAttributeIdEnumTypes(InTheHand.Net.Bluetooth.ServiceRecord)">
            <summary>
            Get a list of enum-like classes containing Service Attribute Id definitions 
            for the type of the Service Class contained in the given Service Record.
            </summary>
            -
            <param name="record">A <see cref="T:InTheHand.Net.Bluetooth.ServiceRecord"/>
            whose <see cref="F:InTheHand.Net.Bluetooth.AttributeIds.UniversalAttributeId.ServiceClassIdList"/>
            element will be retrieved, and its Service Class Id will used
            for the lookup.
            </param>
            -
            <returns>
            An array of <see cref="T:System.Type"/> each of which is a enum-like class 
            which defines the set of Service Attribute IDs used by a particular 
            Service Class e.g. ObjectPushProfile.
            An empty array will be returned if none of the Service Classes
            are known, or the record contains no 
            <see cref="F:InTheHand.Net.Bluetooth.AttributeIds.UniversalAttributeId.ServiceClassIdList"/>
            attribute, or it is invalid.
            <note>Currently only the first Service Class Id is looked-up.</note>
            </returns>
            -
            <exception cref="T:System.ArgumentNullException">
            <paramref name="record"/> is null.
            </exception>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.MapServiceClassToAttributeIdList.GetAttributeIdEnumType(InTheHand.Net.Bluetooth.ServiceElement)">
            <summary>
            Get the enum-like class containing the Service Attribute Id definitions 
            for the type of the Service Class contained in the given 
            <see cref="F:InTheHand.Net.Bluetooth.AttributeIds.UniversalAttributeId.ServiceClassIdList"/>
            (type <see cref="F:InTheHand.Net.Bluetooth.ElementTypeDescriptor.Uuid"/>) data element.
            </summary>
            -
            <param name="idElement">A <see cref="T:InTheHand.Net.Bluetooth.ServiceElement"/>
            of 'UUID' type containing the Service Class to search for.
            </param>
            -
            <returns>
            A <see cref="T:System.Type"/> object representing the enum-like class
            holding the Attribute Id definitions, or null if the Service Class is
            unknown or the element is not of <see cref="F:InTheHand.Net.Bluetooth.ElementTypeDescriptor.Uuid"/>
            type.
            </returns>
            -
            <exception cref="T:System.ArgumentNullException">
            <paramref name="idElement"/> is null.
            </exception>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.MapServiceClassToAttributeIdList.GetAttributeIdEnumType(System.Guid)">
            <overloads>
            Get the enum-like class containing the Service Attribute Id definitions 
            for the type of the Service Class specified.
            </overloads>
            -
            <summary>
            Get the enum-like class containing the Service Attribute Id definitions 
            for the type of the Service Class specified by UUID.
            </summary>
            -
            <param name="uuid">The Service Class to search for, as a <see cref="T:System.Guid"/>.
            </param>
            -
            <returns>
            A <see cref="T:System.Type"/> object representing the enum-like class
            holding the Attribute Id definitions, or null if the Service Class is
            unknown.
            </returns>
        </member>
        <member name="T:InTheHand.Net.Bluetooth.DeviceClass">
            <summary>
            Class of Device flags as assigned in the Bluetooth specifications.
            </summary>
            <remarks>
            <para>Is returned by the property <see
            cref="P:InTheHand.Net.Bluetooth.ClassOfDevice.Device">ClassOfDevice.Device</see>.
            </para>
            <para>Defined in Bluetooth Specifications <see href="https://www.bluetooth.org/Technical/AssignedNumbers/baseband.htm"/>.
            </para>
            </remarks>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.DeviceClass.Miscellaneous">
            <summary>
            Miscellaneous &#x2014; 
            [Ref #2: Used where a more specific Major Device Class code
            is not suited (but only as specified in this document). Devices
            that do not have a major class code assigned can use the all-1 code
            (<see cref="F:InTheHand.Net.Bluetooth.DeviceClass.Uncategorized"/>)
            until 'classified']
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.DeviceClass.Computer">
            <summary>
            Major class: Computer (desktop,notebook, PDA, organizers, .... ).
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.DeviceClass.DesktopComputer">
            <summary>
            Major class: Computer
            &#x2022; Minor class: Desktop workstation.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.DeviceClass.ServerComputer">
            <summary>
            Major class: Computer
            &#x2022; Minor class: Server-class computer.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.DeviceClass.LaptopComputer">
            <summary>
            Major class: Computer
            &#x2022; Minor class: Laptop.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.DeviceClass.HandheldComputer">
            <summary>
            Major class: Computer
            &#x2022; Minor class: Handheld PC/PDA (clam shell).
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.DeviceClass.PdaComputer">
            <summary>
            Major class: Computer
            &#x2022; Minor class: Palm sized PC/PDA.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.DeviceClass.WearableComputer">
            <summary>
            Major class: Computer
            &#x2022; Minor class: Wearable computer (Watch sized).
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.DeviceClass.TabletComputer">
            <summary>
            Major class: Computer
            &#x2022; Minor class: Tablet.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.DeviceClass.Phone">
            <summary>
            Major class: Phone (cellular, cordless, payphone, modem, ...).
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.DeviceClass.CellPhone">
            <summary>
            Major class: Phone
            &#x2022; Minor class: Cellular.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.DeviceClass.CordlessPhone">
            <summary>
            Major class: Phone
            &#x2022; Minor class: Cordlss.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.DeviceClass.SmartPhone">
            <summary>
            Major class: Phone
            &#x2022; Minor class: Smart phone.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.DeviceClass.WiredPhone">
            <summary>
            Major class: Phone
            &#x2022; Minor class: Wired modem or voice gateway.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.DeviceClass.IsdnAccess">
            <summary>
            Major class: Phone
            &#x2022; Minor class: Common ISDN Access.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.DeviceClass.AccessPointAvailable">
            <summary>
            Major class: LAN /Network Access point.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.DeviceClass.AudioVideoUnclassified">
            <summary>
            Major class: Audio/Video (headset,speaker,stereo, video display, vcr.....
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.DeviceClass.Peripheral">
            <summary>
            Major class: Peripheral (mouse, joystick, keyboards, ..... ).
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.DeviceClass.Imaging">
            <summary>
            Major class: Imaging (printing, scanner, camera, display, ...).
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.DeviceClass.Wearable">
            <summary>
            Major class: Wearable.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.DeviceClass.Toy">
            <summary>
            Major class: Toy.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.DeviceClass.Medical">
            <summary>
            Major class: Medical.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.DeviceClass.Uncategorized">
            <summary>
            Uncategorized, specific device code not specified
            &#x2014; see <see cref="F:InTheHand.Net.Bluetooth.DeviceClass.Miscellaneous"/>
            </summary>
        </member>
        <member name="T:InTheHand.Net.Bluetooth.DeviceClass_Masks">
            <exclude/>
        </member>
        <member name="T:InTheHand.Net.Bluetooth.BluetoothRadio">
            <summary>
            Represents a Bluetooth Radio device.
            </summary>
            <remarks>Allows you to query properties of the radio hardware and set the mode.</remarks>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.BluetoothRadio.GetAllRadios">
            <summary>
             Gets an array of all Bluetooth radios on the system.  
            </summary>
            <remarks>
            <para>If there are no Bluetooth radios then this method will produce an error.
            </para>
            <para>The order in which the library will search for Bluetooth 
            stacks is controlled by configuration.
            </para>
            </remarks>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.BluetoothRadio.GetPrimaryRadio">
            <summary>
            Gets the primary <see cref="T:InTheHand.Net.Bluetooth.BluetoothRadio"/>.
            </summary>
            <remarks>
            <para>If there are no Bluetooth radios then this method will produce an error.
            </para>
            <para>The order in which the library will search for Bluetooth 
            stacks is controlled by configuration.
            </para>
            </remarks>
        </member>
        <member name="P:InTheHand.Net.Bluetooth.BluetoothRadio.AllRadios">
            <summary>
             Gets an array of all Bluetooth radios on the system.  
            </summary>
            <remarks>Under Windows CE this will only ever return a single <see cref="T:InTheHand.Net.Bluetooth.BluetoothRadio"/> device.
            <para>If the device has a third-party stack this property will return an empty collection</para></remarks>
        </member>
        <member name="P:InTheHand.Net.Bluetooth.BluetoothRadio.PrimaryRadio">
            <summary>
            Gets the primary <see cref="T:InTheHand.Net.Bluetooth.BluetoothRadio"/>.
            </summary>
            <remarks>For Windows CE based devices this is the only <see cref="T:InTheHand.Net.Bluetooth.BluetoothRadio"/>, for Windows XP this is the first available <see cref="T:InTheHand.Net.Bluetooth.BluetoothRadio"/> device.
            <para>If the device has a third-party stack this property will return null</para></remarks>
        </member>
        <member name="P:InTheHand.Net.Bluetooth.BluetoothRadio.IsSupported">
            <summary>
            Gets a value that indicates whether the 32feet.NET library can be used with the current device.
            </summary>
        </member>
        <member name="P:InTheHand.Net.Bluetooth.BluetoothRadio.StackFactory">
            <summary>
            Gets a class factory for creating client and listener instances on a particular stack.
            </summary>
        </member>
        <member name="P:InTheHand.Net.Bluetooth.BluetoothRadio.Remote">
            <summary>
            Gets whether the radio is on a Bluetooth stack on a remote machine.
            </summary>
            -
            <value>Is <see langword="null"/> if the radio is on to the local
            machine, otherwise it&#x2019;s the name of the remote machine to which the
            radio is attached.
            </value>
        </member>
        <member name="P:InTheHand.Net.Bluetooth.BluetoothRadio.Handle">
            <summary>
            Gets the handle for this radio.
            </summary>
            <remarks>Relevant only on Windows XP.</remarks>
        </member>
        <member name="P:InTheHand.Net.Bluetooth.BluetoothRadio.HardwareStatus">
            <summary>
            Returns the current status of the Bluetooth radio hardware.
            </summary>
            <value>A member of the <see cref="P:InTheHand.Net.Bluetooth.BluetoothRadio.HardwareStatus"/> enumeration.</value>
        </member>
        <member name="P:InTheHand.Net.Bluetooth.BluetoothRadio.Mode">
            <summary>
            Gets or Sets the current mode of operation of the Bluetooth radio.
            </summary>
            <remarks>
            <para><strong>Microsoft CE/WM</strong></para>
            This setting will be persisted when the device is reset.
            An Icon will be displayed in the tray on the Home screen and a ?Windows Mobile device will emit a flashing blue LED when Bluetooth is enabled.
            
            <para><strong>Widcomm Win32</strong></para>
            <para>Is supported.
            </para>
            
            <para><strong>Widcomm CE/WM</strong></para>
            <para>Get and Set both supported.
            </para>
            <list type="table">
            <listheader><term>Mode</term><term>Get</term><term>Set</term>
            </listheader>
            <item><term>PowerOff</term><term>Disabled or non-connectable</term>
            <term>CONNECT_ALLOW_NONE</term>
            </item>
            <item><term>Connectable</term><term>Connectable</term>
            <term>CONNECT_ALLOW_ALL, note not CONNECT_ALLOW_PAIRED.</term>
            </item>
            <item><term>Discoverable</term><term>Discoverable</term>
            <term>Plus also discoverable.</term>
            </item>
            </list>
            <para>Note also that when the Widcomm stack is disabled/off
            we report <c>PowerOff</c> (not in 2.4 and earlier), but
            we can't turn put it in that mode from the library.
            Neither can we turn it back on, <strong>except</strong> that
            it happens when the application first uses Bluetooth!
            </para>
            
            <para><strong>Widcomm Win32</strong></para>
            <para>Set is not supported.  There's no Widcomm API support.
            </para>
            
            </remarks>
        </member>
        <member name="P:InTheHand.Net.Bluetooth.BluetoothRadio.Modes">
            <summary>
            Get whether the radio is connectable and/or discoverable, and powered-up.
            </summary>
            -
            <remarks>
            <para>A Bluetooth radio can be powered-off and thus cannot be used,
            or it can be powered-up and can make connections to a remote device (outbound),
            it can then also independently have the two "Scan Modes" set, they are:
            Connectable (for inbound connections) and Discoverable.
            </para>
            <para>There are restrictions on the various platforms that we support:
            for instance when the radio is powered-down how the scan state is reported,
            whether the power state can be reported,
            whether the radio can be make non-connectable if is still discoverable,
            and finally whether a user application is restricted in how it can change modes.
            See <see cref="T:InTheHand.Net.Bluetooth.RadioModes"/> for more information.
            </para>
            <para>The Microsoft stack on desktop Windows for instance
            does not allow the radio to be set non-connectable when it is discoverable,
            the radio cannot be powered-down (in Windows 7 and earlier),
            and the mode options that can be set are restructed depending on what
            mode settings the user has made manually in the Bluetooth Control Panel.
            </para>
            </remarks>
        </member>
        <member name="P:InTheHand.Net.Bluetooth.BluetoothRadio.LocalAddress">
            <summary>
            Get the address of the local Bluetooth radio device.
            </summary>
            -
            <remarks><para>The property can return a <see langword="null"/> value in
            some cases.  For instance on CE when the radio is powered-off the value 
            will be <see>null</see>.</para>
            </remarks>
            -
            <value>The address of the local Bluetooth radio device.
            </value>
        </member>
        <member name="P:InTheHand.Net.Bluetooth.BluetoothRadio.Name">
            <summary>
            Returns the friendly name of the local Bluetooth radio.
            </summary>
            -
            <remarks>
            <para>Devices normally cache the remote device name, only reading it the first
            time the remote device is discovered.  It is generally not useful then to change
            the name to provide a status update.  For instance on desktop Windows
            with the Microsoft stack we haven't found a good way for the name to be
            flushed so that it is re-read, even deleting the device didn't flush the
            name if I remember correctly.
            </para>
            <para>Currently read-only on Widcomm stack.  Probably could be supported,
            let us know if you need this function.
            </para>
            </remarks>
        </member>
        <member name="P:InTheHand.Net.Bluetooth.BluetoothRadio.ClassOfDevice">
            <summary>
            Returns the Class of Device.
            </summary>
        </member>
        <member name="P:InTheHand.Net.Bluetooth.BluetoothRadio.Manufacturer">
            <summary>
            Returns the manufacturer of the <see cref="T:InTheHand.Net.Bluetooth.BluetoothRadio"/> device.
            </summary>
            <remarks>
            See <see cref="P:InTheHand.Net.Bluetooth.BluetoothRadio.HciVersion"/> for more information.
            </remarks>
        </member>
        <member name="P:InTheHand.Net.Bluetooth.BluetoothRadio.HciVersion">
            <summary>
            Bluetooth Version supported by the Host Controller Interface implementation.
            </summary>
            -
            <remarks>
            <para>There are five fields returned by the Read Local Version Information
            HCI command: HCI Version, HCI Revision, LMP Version,
            Manufacturer_Name, and LMP Subversion.
            We expose all five, but not all platforms provide access to them all.
            The Microsoft stack on desktop Windows exposes all five,
            except for Windows XP which only exposes the Manufacturer
            and LmpSubversion values.  Bluetopia apparently exposes none of them.
            The Microsoft stack on Windows Mobile, Widcomm on both platforms,
            BlueSoleil, and BlueZ expose all five.
            </para>
            </remarks>
        </member>
        <member name="P:InTheHand.Net.Bluetooth.BluetoothRadio.HciRevision">
            <summary>
            Manufacture's Revision number of the HCI implementation.
            </summary>
            <remarks>
            See <see cref="P:InTheHand.Net.Bluetooth.BluetoothRadio.HciVersion"/> for more information.
            </remarks>
        </member>
        <member name="P:InTheHand.Net.Bluetooth.BluetoothRadio.LmpVersion">
            <summary>
            Bluetooth Version supported by the Link Manager Protocol implementation.
            </summary>
            <remarks>
            See <see cref="P:InTheHand.Net.Bluetooth.BluetoothRadio.HciVersion"/> for more information.
            </remarks>
        </member>
        <member name="P:InTheHand.Net.Bluetooth.BluetoothRadio.LmpSubversion">
            <summary>
            Manufacture's Revision number of the LMP implementation.
            </summary>
            <remarks>
            See <see cref="P:InTheHand.Net.Bluetooth.BluetoothRadio.HciVersion"/> for more information.
            </remarks>
        </member>
        <member name="P:InTheHand.Net.Bluetooth.BluetoothRadio.LmpFeatures">
            <summary>
            Get the LMP Features flags for the radio.
            </summary>
            -
            <remarks>
            <para>Implemented on all stacks except Widcomm.
            Only tested so far on MSFT+Win32, MSFT+WM, and Bluetopia.
            </para>
            <para>Implemented *after* version 3.5, see workitem
            <see href="http://32feet.codeplex.com/workitem/33059">33059</see>.
            </para>
            </remarks>
        </member>
        <member name="P:InTheHand.Net.Bluetooth.BluetoothRadio.SoftwareManufacturer">
            <summary>
            Returns the manufacturer of the Bluetooth software stack running locally.
            </summary>
        </member>
        <member name="T:InTheHand.Net.Bluetooth.Widcomm.WidcommBluetoothClient">
            <summary>
            Provides client connections for Bluetooth network services with Widcomm stack.
            </summary>
        </member>
        <member name="T:InTheHand.Net.Bluetooth.Factory.CommonBluetoothClient">
            <exclude/>
        </member>
        <member name="T:InTheHand.Net.Bluetooth.Factory.CommonDiscoveryBluetoothClient">
            <exclude/>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.Factory.CommonDiscoveryBluetoothClient.ConvertBthInquiryParams(System.Int32,System.TimeSpan,System.Byte@,System.Byte@)">
            <summary>
            Convert the user Inquiry parameters to the formats used by HCI.
            </summary>
            <param name="maxDevices">The <c>maxDevices</c> parameter from e.g.
            <see cref="M:InTheHand.Net.Sockets.BluetoothClient.DiscoverDevices(System.Int32,System.Bool,System.Bool,System.Bool,System.Bool)"/>.
            </param>
            <param name="inquiryLength">The <see cref="P:InTheHand.Net.Sockets.BluetoothClient.InquiryLength"/> property
            <see cref="T:InTheHand.Net.Sockets.BluetoothClient"/>.
            </param>
            <param name="hciMaxResponses">On return contains the Num_Responses value to be passed to the HCI Inquiry command.
            If greater that 255 or less than zero, the value 0 will be returned.
            HCI uses zero as "Unlimited".
            </param>
            <param name="hciInquiryLength">On return contains the Inquiry_Length value to be passed to the HCI Inquiry command.
            Is scaled by the divisor 1.28secs
            and if not in range 1 to 0x30 inclusive is set to 10.
            </param>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.Factory.IUsesBluetoothConnectorImplementsServiceLookup.BeginServiceDiscovery(InTheHand.Net.BluetoothAddress,System.Guid,System.AsyncCallback,System.Object)">
            <summary>
            When overidden, initiates 
            lookup the SDP record with the give Service Class Id
            to find the RFCOMM port number (SCN) that the server is listening on.
            The process returns a list of port numbers.
            </summary>
            <param name="address">The remote device.
            </param>
            <param name="serviceGuid">The Service Class Id.
            </param>
            <param name="asyncCallback">callback</param>
            <param name="state">state</param>
            <returns>IAsyncResult</returns>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.Factory.IUsesBluetoothConnectorImplementsServiceLookup.EndServiceDiscovery(System.IAsyncResult)">
            <summary>
            When overidden, 
            completes the SDP Record to port number lookup process
            </summary>
            -
            <param name="ar">IAsyncResult from <see cref="M:InTheHand.Net.Bluetooth.Factory.IUsesBluetoothConnectorImplementsServiceLookup.BeginServiceDiscovery(InTheHand.Net.BluetoothAddress,System.Guid,System.AsyncCallback,System.Object)"/>.
            </param>
            -
            <remarks>
            <para>There must be at least one entry in the result list for each
            Service Record found for the specified Service Class Id.  This
            allows us to know if no records were found, or that records were
            found but none of them were for RFCOMM.
            If a particular record does not have a RFCOMM port then -1 (negative
            one should be added to the list for it).
            </para>
            <para>The process may throw an exception if an error occurs, e.g.
            the remote device did not respond.
            </para>
            </remarks>
            -
            <returns>A <see cref="T:System.Collections.Generic.List{System.Int32}"/>
            with at least one entry for each Service Record
            found for the specified Service Class Id, the item being -1 if the
            record has no port. is .
            </returns>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.Factory.CommonBluetoothClient.BeginServiceDiscovery(InTheHand.Net.BluetoothAddress,System.Guid,System.AsyncCallback,System.Object)">
            <summary>
            When overidden, initiates 
            lookup the SDP record with the give Service Class Id
            to find the RFCOMM port number (SCN) that the server is listening on.
            The process returns a list of port numbers.
            </summary>
            <param name="address">The remote device.
            </param>
            <param name="serviceGuid">The Service Class Id.
            </param>
            <param name="asyncCallback">callback</param>
            <param name="state">state</param>
            <returns>IAsyncResult</returns>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.Factory.CommonBluetoothClient.EndServiceDiscovery(System.IAsyncResult)">
            <summary>
            When overidden, 
            completes the SDP Record to port number lookup process
            </summary>
            -
            <param name="ar">IAsyncResult from <see cref="M:InTheHand.Net.Bluetooth.Factory.CommonBluetoothClient.BeginServiceDiscovery(InTheHand.Net.BluetoothAddress,System.Guid,System.AsyncCallback,System.Object)"/>.
            </param>
            -
            <remarks>
            <para>There must be at least one entry in the result list for each
            Service Record found for the specified Service Class Id.  This
            allows us to know if no records were found, or that records were
            found but none of them were for RFCOMM.
            If a particular record does not have a RFCOMM port then -1 (negative
            one should be added to the list for it).
            </para>
            <para>The process may throw an exception if an error occurs, e.g.
            the remote device did not respond.
            </para>
            </remarks>
            -
            <returns>A <see cref="T:System.Collections.Generic.List{System.Int32}"/>
            with at least one entry for each Service Record
            found for the specified Service Class Id, the item being -1 if the
            record has no port. is .
            </returns>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.Widcomm.WidcommBluetoothClient.#ctor(InTheHand.Net.Bluetooth.Widcomm.WidcommRfcommStreamBase,InTheHand.Net.Bluetooth.Widcomm.WidcommBluetoothFactoryBase)">
            <summary>
            Used by WidcommBluetoothListener to return the newly accepted connection.
            </summary>
            -
            <param name="strm">The WidcommRfcommStream containing the newly connected 
            RfCommPort.
            </param>
            <param name="factory">Factory to use in GetRemoteMachineName etc.
            </param>
        </member>
        <member name="P:InTheHand.Net.Bluetooth.Widcomm.WidcommBluetoothClient.ReadKnownDeviceFromTheRegistry">
            <summary>
            ... Allow the tests to disable the Registry lookup.
            </summary>
        </member>
        <member name="T:InTheHand.Net.Bluetooth.Widcomm.WidcommSocketException">
            <summary>
            Note that this exception will always be internal, just catch SocketException.
            </summary>
        </member>
        <member name="T:InTheHand.Net.Bluetooth.AttributeIds.HidProfileAttributeId">
            <summary>
            Service Attribute IDs defined by the Human Interface Device (HID) Profile specification.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.AttributeIds.HidProfileAttributeId.DeviceReleaseNumber">
            <summary>
            HIDDeviceReleaseNumber
            </summary>
            <remarks><para>[<c>16-bit unsigned integer</c>]</para>
            <para>
            &#x201C;A numeric expression identifying the device release number in Binary-Coded 
            Decimal. This is a vendor-assigned field, which defines the version of 
            the product identified by the Bluetooth Device Identification [13] VendorID 
            and ProductID attributes. This attribute is intended to differentiate 
            between versions of products with identical VendorIDs and ProductIDs. 
            The value of the field is 0xJJMN for version JJ.M.N (JJ – major version 
            number, M – minor version number, N – sub-minor version number). &#x2026;&#x201D;
            </para>
            </remarks>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.AttributeIds.HidProfileAttributeId.ParserVersion">
            <summary>
            HIDParserVersion
            </summary>
            <remarks><para>[<c>16-bit unsigned integer</c>]</para>
            <para>
            &#x201C;Each version of a profile is assigned a 16-bit unsigned integer version
            number of the base HID Specification [4] that the device was designed to. The value
            of the field is 0xJJMN for version JJ.M.N &#x2026;&#x201D;
            </para>
            </remarks>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.AttributeIds.HidProfileAttributeId.DeviceSubclass">
            <summary>
            HIDDeviceSubclass
            </summary>
            <remarks><para>[<c>8-bit unsigned integer</c>]</para>
            <para>
            &#x201C;The HIDDeviceSubclass attribute is an 8-bit integer, which
            identifies the type of device (keyboard, mouse, joystick, gamepad,
            remote control, sensing device, etc.). Keyboards and mice are required
            to support boot mode operation. In boot mode, a device presents a fixed
            report, thus negating the requirement for a HID parser.
            <para></para>The Attribute value is identical to the low-order 8 bits
            of the Class of Device/Service (CoD) field in the FHS packet, where
            bits 7-2 contain the 6 bit Minor Device Class value (defined in Section
            1.2 of the Bluetooth Assigned Numbers document [8]) and bits 1-0 are
            set to zero.  &#x2026;&#x201D;
            </para>
            </remarks>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.AttributeIds.HidProfileAttributeId.CountryCode">
            <summary>
            HIDCountryCode
            </summary>
            <remarks><para>[<c>8-bit unsigned integer</c>]</para>
            <para>
            &#x201C;The HIDCountryCode attribute is an 8-bit integer, which identifies
            which country the hardware is localized for. Most hardware is not localized
            and thus this value would be zero (0).&#x2026; 
            </para><para>The valid country codes are listed in the HID Specification
            [4].&#x201D;
            </para>
            </remarks>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.AttributeIds.HidProfileAttributeId.VirtualCable">
            <summary>
            HIDVirtualCable
            </summary>
            <remarks><para>[<c>8-bit Boolean</c>]</para>
            <para>
            &#x201C;The HIDVirtualCable attribute is a boolean value, which indicates
            whether the device supports virtual connections as described in Section
            Virtual Cables and Connection Re-Establishment. Devices that have this
            attribute True indicate that the device supports 1:1 bonding with a host,
            and the device expects to automatically reconnect if the connection is
            dropped for any unknown reason.&#x201D;
            </para>
            </remarks>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.AttributeIds.HidProfileAttributeId.ReconnectInitiate">
            <summary>
            HIDReconnectInitiate
            </summary>
            <remarks><para>[<c>8-bit Boolean</c>]</para>
            <para>
            &#x201C;The HIDReconnectInitiate attribute is a boolean value, which
            indicates whether the device initiates the reconnection process or
            expects the host to. &#x2026;&#x201D;
            </para>
            </remarks>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.AttributeIds.HidProfileAttributeId.DescriptorList">
            <summary>
            HIDDescriptorList
            </summary>
            <remarks><para>[<c>Data element sequence</c>]</para>
            <para>
            &#x201C;The HIDDescriptorList Data Element Sequence performs the function of the
            HID Descriptor that is defined in Section 6.2 of the HID Specification [4]. The
            HIDDescriptorList identifies the descriptors associated with the device. &#x2026;
            </para><para>The HIDDescriptorList is a Data Element Sequence that consists of
            one or more HIDDescriptors. A HIDDescriptor is a data element sequence containing, 
            minimally, a pair of elements. For compatibility with future versions of the HID
            profile, addition elements found in a HIDDescriptor shall be ignored. &#x2026;
                   &#x201D;
            </para>
            </remarks>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.AttributeIds.HidProfileAttributeId.LangIdBaseList">
            <summary>
            HIDLANGIDBaseList
            </summary>
            <remarks><para>[<c>Data element sequence</c>]</para>
            <para>
            &#x201C;The HIDLANGIDBaseList is a Data Element Sequence that consists of one or
            more HIDLANGIDBases. A HIDLANGIDBase is a data element sequence containing, minimally, 
            two elements for each of the languages used in the service record: a language identifier
            (LANGID) and a base attribute ID. For compatibility with future versions of the
            HID profile, additional elements found in a HIDLANGIDBase shall be ignored.
            </para><para>The first element, called the HIDLANGID, contains an identifier representing
            the natural language ID. The language is encoded according to the “Universal Serial
            Bus Language Identifiers (LANGIDs)” Specification [9].
            </para><para>The second element, called the HIDLanguageBase, contains an attribute
            ID that serves as the base attribute ID for the natural language in the service
            record. Different service records within a server may use different base attribute
            ID values for the same language. &#x2026;&#x201D;
            </para>
            </remarks>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.AttributeIds.HidProfileAttributeId.SdpDisable">
            <summary>
            HIDSDPDisable
            </summary>
            <remarks><para>[<c>8-bit Boolean</c>]</para>
            <para>
            &#x201C;The HIDSDPDisable attribute is a boolean value, which indicates whether
            connection to the SDP channel and Control or Interrupt channels are mutually exclusive.
            &#x2026;&#x201D;
            </para>
            </remarks>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.AttributeIds.HidProfileAttributeId.BatteryPower">
            <summary>
            HIDBatteryPower
            </summary>
            <remarks><para>[<c>8-bit Boolean</c>]</para>
            <para>
            &#x201C;The HIDBatteryPower attribute is a boolean value, which indicates whether
            the device is battery powered (and requires careful power management) or has some
            other source of power that requires minimal management. &#x2026;&#x201D;
            </para>
            </remarks>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.AttributeIds.HidProfileAttributeId.RemoteWake">
            <summary>
            HIDRemoteWake
            </summary>
            <remarks><para>[<c>8-bit Boolean</c>]</para>
            <para>
            &#x201C;The HIDRemoteWake attribute is a boolean value, which indicates whether
            the device considers itself remote wake up-capable. When a system enters a suspend
            (or standby) state, this flag shall be used to determine whether the host includes
            this device in the set of devices that can wake it up. A mouse or keyboard are
            typical examples of Remote Wake up devices.&#x201D;
            </para>
            </remarks>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.AttributeIds.HidProfileAttributeId.BootDevice">
            <summary>
            HIDBootDevice
            </summary>
            <remarks><para>[<c>8-bit Boolean</c>]</para>
            <para>
            &#x201C;HIDBootDevice is an 8-bit Boolean value that when True indicates whether
            the device supports boot protocol mode and by inference the Set_Protocol and Get_Protocol
            commands. &#x2026;&#x201D;
            </para>
            </remarks>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.AttributeIds.HidProfileAttributeId.SupervisionTimeout">
            <summary>
            HIDSupervisionTimeout
            </summary>
            <remarks><para>[<c>16-bit unsigned integer</c>]</para>
            <para>
            &#x201C;The HIDSupervisionTimeout is a 16-bit value which indicates the device
            vendor’s recommended baseband Link Supervision Timeout value in slots. &#x2026;&#x201D;
            </para>
            </remarks>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.AttributeIds.HidProfileAttributeId.NormallyConnectable">
            <summary>
            HIDNormallyConnectable
            </summary>
            <remarks><para>[<c>8-bit Boolean</c>]</para>
            <para>
            &#x201C;HIDNormallyConnectable is an optional Boolean attribute that specifies
            whether a HID is normally in Page Scan mode (when no connection is active) or not.
            &#x2026;&#x201D;
            </para>
            </remarks>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.AttributeIds.HidProfileAttributeId.ProfileVersion">
            <summary>
            HIDProfileVersion
            </summary>
            <remarks><para>[<c>16-bit unsigned integer</c>]</para>
            <para>
            &#x201C;Each device designed to this specification shall include a 16-bit unsigned
            integer version number of the Bluetooth HID Specification (this document) that
            the device was designed to. The value of the field is 0xJJMN for version JJ.M.N
            (JJ – major version number, M – minor version number, N – sub-minor version number);
            &#x2026;&#x201D;
            </para>
            </remarks>
        </member>
        <member name="T:InTheHand.Net.ObexWebRequest">
            <summary>
            Provides an OBEX implementation of the <see cref="T:System.Net.WebRequest"/> class.
            </summary>
            -
            <remarks>
            <para>If you want to transfer an file or other object using the standard 
            service as used by Windows' Wireless Link / Bluetooth File Transfer Wizard, 
            Palm's Beam, Nokia's Send via Infrared, then use the OBEX protocol.  
            </para>
            <para>The PUT operation is supported, and there is new support for GET,
            (see the documentation at the <see cref="P:InTheHand.Net.ObexWebRequest.Method"/>
            property).
            Changing folders is not supported, nor is getting a folder listing.
            </para>
            <para>In the previous version there were some issue with handling file names 
            that include non-English characters, and connections 
            to some device types failed.  Also if the connection to the peer was lost
            then the request could hang reading forever.  See the release note and bugs
            database for more information.
            </para>
            </remarks>
            -
            <example>
            For Bluetooth one can use code like the following to send a file:
            (Note a failure is signalled by an exception).
            <code lang="VB.NET">
            Dim addr As BluetoothAddress = BluetoothAddress.Parse("002233445566")
            Dim path As String = "HelloWorld.txt"
            '
            Dim req As New ObexWebRequest(addr, path)
            req.ReadFile("Hello World.txt")
            Dim rsp As ObexWebResponse = CType(req.GetResponse(),ObexWebResponse)
            Console.WriteLine("Response Code: {0} (0x{0:X})", rsp.StatusCode)
            </code>
            That constructor isn't available for other transports (TCP/IP, IrDA)
            so one has to create a Uri to provide the scheme, address, and path
            parameters.  Thus use code like the following to send a file.
            <code lang="VB.NET">
            ' The host part of the URI is the device address, e.g. IrDAAddress.ToString(),
            ' and the file part is the OBEX object name.
            Dim addr As BluetoothAddress = ...
            Dim addrStr As String = addr.ToString("N")
            Dim uri As New Uri("obex://" &amp; addrStr &amp; "/HelloWorld.txt")
            '
            Dim req As New ObexWebRequest(uri)
            req.ReadFile("Hello World.txt")
            Dim rsp As ObexWebResponse = CType(req.GetResponse(),ObexWebResponse)
            Console.WriteLine("Response Code: {0} (0x{0:X})", rsp.StatusCode)
            </code>
            Or, to send locally generated content use something like the following.
            <code lang="VB.NET">
            Dim addr As BluetoothAddress = ...
            Dim path As String = "HelloWorld2.txt"
            '
            Dim req As New ObexWebRequest(addr, path)
            Using content As Stream = req.GetRequestStream()
               ' Using a StreamWriter to write text to the stream...
               Using wtr As New StreamWriter(content)
                  wtr.WriteLine("Hello World GetRequestStream")
                  wtr.WriteLine("Hello World GetRequestStream 2")
                  wtr.Flush()
                  ' Set the Length header value
                  req.ContentLength = content.Length
               End Using
               ' In this case closing the StreamWriter also closed the Stream, but ...
            End Using
            Dim rsp As ObexWebResponse = CType(req.GetResponse(),ObexWebResponse) 
            Console.WriteLine("Response Code: {0} (0x{0:X})", rsp.StatusCode)
            </code>
            See also the ObexPushApplication and ObexPushVB sample programs.
            </example>
        </member>
        <member name="M:InTheHand.Net.ObexWebRequest.#ctor(System.Uri)">
            <overloads>
            Create a new Obex request with the specified <see cref="T:System.Uri"/>.
            </overloads>
            -
            <summary>
            Create a new Obex request with the specified <see cref="T:System.Uri"/>.
            </summary>
            <param name="requestUri">e.g. "obex://112233445566/HelloWorld.txt"</param>
            <remarks>Uri must use one of the following schemes - obex, obex-push, obex-ftp, obex-sync.
            The host name must be the device address in short hex, or dotted hex notation - not the default representation using the colon separator</remarks>
        </member>
        <member name="M:InTheHand.Net.ObexWebRequest.#ctor(System.Uri,System.IO.Stream)">
            <summary>
            [Advanced usage]
            Create a new Obex request with the specified <see cref="T:System.Uri"/> 
            and the open <see cref="T:System.IO.Stream"/> connection to an OBEX server.
            </summary>
            -
            <param name="requestUri">[Advanced usage]
            A url of the form 
            &#x201C;<i>scheme</i><c>:///</c><i>filename</i>&#x201D;, 
            &#x201C;e.g. <c>obex:///foo.txt</c>&#x201D;.
            That is the host part is blank, 
            and the scheme and filename parts set as for the other constructor 
            <see cref="M:InTheHand.Net.ObexWebRequest.#ctor(System.Uri)"/>
            </param>
            <param name="stream">An instance of <see cref="T:System.IO.Stream"/>
            already connected to an OBEX server.
            </param>
        </member>
        <member name="M:InTheHand.Net.ObexWebRequest.#ctor(System.String,InTheHand.Net.BluetoothAddress,System.String)">
            <summary>
            Initialize an instance of this class given a scheme, 
            a Bluetooth Device Address, and a remote path name.
            </summary>
            -
            <param name="scheme">The Uri scheme. One of 
            <c>obex</c>, <c>obex-push</c>, <c>obex-ftp</c>, or <c>obex-sync</c>.
            </param>
            <param name="target">The Bluetooth Device Address of the OBEX server.
            </param>
            <param name="path">The path on the OBEX server.
            </param>
        </member>
        <member name="M:InTheHand.Net.ObexWebRequest.#ctor(InTheHand.Net.BluetoothAddress,System.String)">
            <summary>
            Initialize an instance of this class given 
            a Bluetooth Device Address, and a remote path name.
            </summary>
            -
            <remarks>
            <para>This is equivalent to calling
            <see cref="M:InTheHand.Net.ObexWebRequest.#ctor(System.String,InTheHand.Net.BluetoothAddress,System.String)">
            ObexWebRequest(String scheme, BluetoothAddress target, String path)
            </see>
            with scheme &#x201C;<c>obex</c>&#x201D;.
            </para>
            </remarks>
            -
            <param name="target">The Bluetooth Device Address of the OBEX server.
            </param>
            <param name="path">The path on the OBEX server.
            </param>
        </member>
        <member name="M:InTheHand.Net.ObexWebRequest.GetRequestStream">
            <summary>
            Gets a <see cref="T:System.IO.Stream"/> object to use to write request data.
            </summary>
            -
            <returns>A <see cref="T:System.IO.Stream"/> to use to write request data.</returns>
        </member>
        <member name="M:InTheHand.Net.ObexWebRequest.ReadFile(System.String)">
            <summary>
            Reads the contents of the specified file to the request stream.
            </summary>
            <param name="fileName">The filename (including the path) from which to read.</param>
            <remarks>Provides an easy equivalent to manually writing the file contents to the request stream.</remarks>
        </member>
        <member name="M:InTheHand.Net.ObexWebRequest.GetResponse">
            <summary>
            Returns the OBEX server response.
            </summary>
            -
            <returns>An <see cref="T:InTheHand.Net.ObexWebResponse"/>.</returns>
            -
            <exception cref="T:System.Net.WebException">
            An error occurred, with the error that occured being stored in the 
            <see cref="P:System.Exception.InnerException"/> property.  If the error 
            occurred in the connect phase then the <see cref="P:System.Net.WebException.Status"/>
            property will have value <see cref="F:System.Net.WebExceptionStatus.ConnectFailure"/>,
            and in the operation phase on the desktop CLR it will have value
            <see cref="F:System.Net.WebExceptionStatus.UnknownError"/>
            </exception>
        </member>
        <member name="M:InTheHand.Net.ObexWebRequest.StreamReadBlockMust(System.IO.Stream,System.Byte[],System.Int32,System.Int32)">
            <summary>
            A wrapper for Stream.Read that blocks until the requested number of bytes
            have been read, and throw an exception if the stream is closed before that occurs.
            </summary>
        </member>
        <member name="M:InTheHand.Net.ObexWebRequest.StreamReadBlock(System.IO.Stream,System.Byte[],System.Int32,System.Int32)">
            <summary>
            A wrapper for Stream.Read that blocks until the requested number of bytes
            have been read or the end of the Stream has been reached.
            Returns the number of bytes read.
            </summary>
        </member>
        <member name="M:InTheHand.Net.ObexWebRequest.BeginGetResponse(System.AsyncCallback,System.Object)">
            <summary>
            Begins a request for a OBEX server response.
            </summary>
            -
            <param name="callback">An <see cref="T:System.AsyncCallback"/> delegate that references the method to invoke when the operation is complete.</param>
            <param name="state">A user-defined object containing information about the operation.
            This object is passed to the callback delegate when the operation is complete.</param>
            -
            <returns>An <see cref="T:System.IAsyncResult"/> that represents the 
            asynchronous operation, which could still be pending.
            </returns>
        </member>
        <member name="M:InTheHand.Net.ObexWebRequest.EndGetResponse(System.IAsyncResult)">
            <summary>
            Begins a request for a OBEX server response.
            </summary>
            -
            <param name="asyncResult">An <see cref="T:System.IAsyncResult"/>
            object that was obtained when the asynchronous operation was started.
            </param>
            -
            <returns>An <see cref="T:InTheHand.Net.ObexWebResponse"/>.</returns>
            -
            <exception cref="T:System.Net.WebException">
            An error occurred, with the error that occured being stored in the 
            <see cref="P:System.Exception.InnerException"/> property.  If the error 
            occurred in the connect phase then the <see cref="P:System.Net.WebException.Status"/>
            property will have value <see cref="F:System.Net.WebExceptionStatus.ConnectFailure"/>,
            and in the operation phase on the desktop CLR it will have value
            <see cref="F:System.Net.WebExceptionStatus.UnknownError"/>
            </exception>
        </member>
        <member name="P:InTheHand.Net.ObexWebRequest.Headers">
            <summary>
            Specifies a collection of the name/value pairs that make up the OBEX headers.
            </summary>
        </member>
        <member name="P:InTheHand.Net.ObexWebRequest.Method">
            <summary>
            Gets or sets the method for the request.
            </summary>
            <remarks>
            <para>For Object Exchange the method code is mapped to the equivalent HTTP style method.
            For example "PUT", "GET" etc. "PUT" is the default value.
            There is new support for GET as of version 2.5.
            </para>
            <para>To use GET change the <c>Method</c> to "<c>GET</c>" and you must also use
            scheme "<c>obex-ftp</c>" in the URL instead of the usual "<c>obex</c>"
            -- unless you know that the default OBEX server you are connecting
            supports GET.
            </para>
            <para>For a PUT sample see the <see cref="T:InTheHand.Net.ObexWebRequest">class</see>
            documentation.  For GET, see below.
            </para>
            
            <example>
            <code lang="VB.NET">
            ' The host part of the URI is the device address, e.g. IrDAAddress.ToString(),
            ' and the file part is the OBEX object name.
            Dim addr As String = "112233445566"
            Dim uri As New Uri("obex-ftp://" &amp; addr &amp; "/HelloWorld.txt")
            Dim req As New ObexWebRequest(uri)
            req.Method = "GET"
            Dim rsp As ObexWebResponse = CType(req.GetResponse(), ObexWebResponse)
            Console.WriteLine("Response Code: {0} (0x{0:X})", rsp.StatusCode)
            Using content As Stream = rsp.GetResponseStream()
               ' Using a StreamReader to read text from the stream...
               Using rdr As New StreamReader(content)
                  While True
                     Dim line As String = rdr.ReadLine()
                     If line Is Nothing Then Exit While
                     Console.WriteLine(line)
                  End While
               End Using
            End Using
            </code>
            </example>
            </remarks>
        </member>
        <member name="P:InTheHand.Net.ObexWebRequest.ContentType">
            <summary>
            Gets or sets the value of the Type OBEX header.
            </summary>
        </member>
        <member name="P:InTheHand.Net.ObexWebRequest.ContentLength">
            <summary>
            Gets or sets the Length OBEX header.
            </summary>
            <remarks>This property is mandatory, if not set no data will be sent.
            If you use the <see cref="M:InTheHand.Net.ObexWebRequest.ReadFile(System.String)"/> helper method this value is automatically populated with the size of the file that was read.</remarks>
        </member>
        <member name="P:InTheHand.Net.ObexWebRequest.Proxy">
            <summary>
            Not Supported - do not use, this will throw an exception.
            </summary>
        </member>
        <member name="P:InTheHand.Net.ObexWebRequest.Timeout">
            <summary>
            Gets or sets the time-out value for the <see cref="M:InTheHand.Net.ObexWebRequest.GetResponse"/> method.
            </summary>
            -
            <remarks>
            <para>In versions 3.2 and earlier this property was ignored on
            Windows Mobile.  It is now (untested!) supported there,
            but not with the Microsoft Bluetooth stack there as it doesn't
            support timeouts.
            A cunning solution is available let me know of your requirements...
            </para>
            </remarks>
            -
            <value>The number of milliseconds to wait before the request times out.
            The default is 50,000 milliseconds (50 seconds).
            A value of -1 or 0 represents no time-out.</value>
        </member>
        <member name="P:InTheHand.Net.ObexWebRequest.RequestUri">
            <summary>
            Gets the original Uniform Resource Identifier (URI) of the request. 
            </summary>
            <remarks>For an ObexPush request the URI will use the "obex://" prefix, followed by the numerical device id in hex format.
            The path section of the URI represents the remote filename of the pushed object. Subfolders are not supported. Some devices may only support specific object types e.g. V-Card.</remarks>
        </member>
        <member name="T:InTheHand.Net.Bluetooth.ServiceRecordParser">
            <summary>
            Parses an array of bytes into the contained SDP 
            <see cref="T:InTheHand.Net.Bluetooth.ServiceRecord"/>.
            </summary>
            -
            <remarks>
            See the
            <see cref="M:InTheHand.Net.Bluetooth.ServiceRecordParser.Parse(System.Byte[],System.Int32,System.Int32)"/>
            methods for more information.
            </remarks>
            -
            <seealso cref="M:InTheHand.Net.Bluetooth.ServiceRecordParser.Parse(System.Byte[],System.Int32,System.Int32)"/>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.ServiceRecordParser.ElementTypeDescriptorOffset">
            <summary>
            Bit offset of the ElementTypeDescriptor field in a header byte.
            </summary>
            <remarks>
            The header byte has two parts: five bits of ElementTypeDescriptor and
            three bits of Size Index.
            </remarks>
            <seealso cref="F:InTheHand.Net.Bluetooth.ServiceRecordParser.SizeIndexMask"/>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.ServiceRecordParser.SizeIndexMask">
            <summary>
            Mask for the SizeIndex field in a header byte.
            </summary>
            <remarks>
            The header byte has two parts: five bits of ElementTypeDescriptor and
            three bits of Size Index, upper and lower respectively.
            </remarks>
            <seealso cref="F:InTheHand.Net.Bluetooth.ServiceRecordParser.ElementTypeDescriptorOffset"/>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.ServiceRecordParser.ErrorMsgFormatUnknownType">
            <exclude/>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.ServiceRecordParser.ErrorMsgFormatTypeNotTypeDSubtype">
            <exclude/>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.ServiceRecordParser.ErrorMsgSizeIndexNotSuitTypeD">
            <exclude/>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.ServiceRecordParser.ErrorMsgServiceRecordBytesZeroLength">
            <exclude/>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.ServiceRecordParser.ErrorMsgFormatInvalidHeaderBytes">
            <exclude/>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.ServiceRecordParser.ErrorMsgFormatTruncated">
            <exclude/>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.ServiceRecordParser.ErrorMsgFormatNotSupportFull32bitSized">
            <exclude/>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.ServiceRecordParser.ErrorMsgTypeNotAsExpected">
            <exclude/>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.ServiceRecordParser.ErrorMsgTopElementNotSequence">
            <exclude/>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.ServiceRecordParser.ErrorMsgMultiSeqChildElementNotSequence">
            <exclude/>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.ServiceRecordParser.ErrorMsgSequenceOverruns">
            <exclude/>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.ServiceRecordParser.ErrorMsgElementOverrunsBuffer_WithLengths">
            <exclude/>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.ServiceRecordParser.ErrorMsgElementOverrunsBuffer">
            <exclude/>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.ServiceRecordParser.ErrorMsgElementOverrunsBufferPrefix">
            <exclude/>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.ServiceRecordParser.ErrorMsgAttributePairFirstMustUint16">
            <exclude/>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.ServiceRecordParser.Parse(System.Byte[])">
            <summary>
            Parses an array of bytes into its contained 
            <see cref="T:InTheHand.Net.Bluetooth.ServiceRecord"/>.
            </summary>
            -
            <remarks>
            See <see cref="M:InTheHand.Net.Bluetooth.ServiceRecordParser.Parse(System.Byte[],System.Int32,System.Int32)"/>
            for more information.
            </remarks>
            -
            <param name="buffer">A byte array containing the encoded Service Record.
            </param>
            <returns>The new <see cref="T:InTheHand.Net.Bluetooth.ServiceRecord"/> parsed from the byte array.
            </returns>
            -
            <seealso cref="M:InTheHand.Net.Bluetooth.ServiceRecordParser.Parse(System.Byte[],System.Int32,System.Int32)"/>
            <seealso cref="M:InTheHand.Net.Bluetooth.ServiceRecord.CreateServiceRecordFromBytes(System.Byte[])"/>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.ServiceRecordParser.Parse(System.Byte[],System.Int32,System.Int32)">
            <summary>
            Parses an array of bytes into its contained 
            <see cref="T:InTheHand.Net.Bluetooth.ServiceRecord"/>.
            </summary>
            -
            <remarks>
            <para>If the record contains any element type not supported by the parser
            it will throw <see cref="T:System.NotImplementedException"/>. The
            only element types defined by SDP in v2.0 that are not currently implemented 
            are 64- and 128-bit integers.  Of course any types defined in a later 
            version will also throw this.  This behaviour can be changed with the
            <see cref="P:InTheHand.Net.Bluetooth.ServiceRecordParser.SkipUnhandledElementTypes"/> 
            property.
            </para>
            </remarks>
            -
            <param name="buffer">A byte array containing a Service Record.
            </param>
            <param name="offset">The position in the data buffer at which to
            begin parsing the Service Record.
            </param>
            <param name="length">The length of the Service Record in the byte array.
            </param>
            <returns>The Service Record parse from the byte array.
            </returns>
            -
            <exception cref="T:System.Net.ProtocolViolationException">
            The record contains invalid content.
            </exception>
            <exception cref="T:System.NotImplementedException">
            The record contains an element type not supported by the parser.
            </exception>
            -
            <seealso cref="M:InTheHand.Net.Bluetooth.ServiceRecordParser.Parse(System.Byte[])"/>
            <seealso cref="M:InTheHand.Net.Bluetooth.ServiceRecord.CreateServiceRecordFromBytes(System.Byte[])"/>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.ServiceRecordParser.SplitSearchAttributeResult(System.Byte[])">
            <summary>
            Split a sequence of records into the component records.
            </summary>
            -
            <remarks>
            <para>The Bluetooth SDP operation ServiceSearchAttribute returns its 
            result as a &#x201C;data element sequence where each element in turn is 
            a data element sequence representing an attribute list.&#x201D;  This
            method split that sequence into the individual attribute lists.
            </para>
            <para>On CE/Windows Mobile the result of a record lookup is in this form
            so <see cref="M:InTheHand.Net.Sockets.BluetoothDeviceInfo.GetServiceRecords(System.Guid)"/>
            etc use this method to split the result into is constituent records.
            </para>
            </remarks>
            -
            <param name="multiRecord">A byte array holding the 
            &#x201C;data element sequence where each element in turn is 
            a data element sequence representing an attribute list.&#x201D;
            </param>
            -
            <returns>An array of byte arrays where each holds a SDP record
            (a &#x201C;data element sequence representing an attribute list.&#x201D;).
            If the input was zero length or empty then a zero length array is returned.
            </returns>
            -
            <exception cref="T:System.ArgumentNullException">
            <paramref name="multiRecord"/> is <see langword="null"/>.
            </exception>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.ServiceRecordParser.ParseContent(System.Boolean,System.Boolean,System.Byte[],System.Int32,System.Int32,System.Int32@,InTheHand.Net.Bluetooth.ElementTypeDescriptor,InTheHand.Net.Bluetooth.SizeIndex,System.Int32,System.Int32)">
            <summary>
            For use when the content of the element is in an array
            i.e. the stack parses the element structure and returns the values in byte arrays.
            </summary>
            -
            <param name="networkOrderInteger">Whether the stack uses network order
            for UnsignedInteger and TwosComplementInteger elements (as used in the SDP format)
            or instead that the numerical values are in host order
            in the byte array.
            </param>
            <param name="networkOrderUuid">Whether the stack uses network order
            for Uuid elements (as used in the SDP format) 
            or instead that the numerical values are in host order
            in the byte array.
            </param>
            <param name="buffer">The byte array containing the SDP value.
            </param>
            <param name="offset">(?Always zero).
            </param>
            <param name="length">The length of the byte array.
            (Always equals <paramref name="contentLength"/>).
            </param>
            <param name="_readLength">
            </param>
            <param name="etd">The Element Type.
            </param>
            <param name="dbgSizeIndex">(Not used).
            </param>
            <param name="contentLength">The size of the value.
            </param>
            <param name="contentOffset">(?Always zero).
            </param>
            -
            <returns>
            </returns>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.ServiceRecordParser.GetElementLength(System.Byte[],System.Int32,System.Int32,System.Int32@,System.Int32@)">
            <exclude/>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.ServiceRecordParser.SplitHeaderByte(System.Byte,InTheHand.Net.Bluetooth.ElementTypeDescriptor@,InTheHand.Net.Bluetooth.SizeIndex@)">
            <summary>
            Split a header byte into its <see cref="T:InTheHand.Net.Bluetooth.ElementTypeDescriptor"/> and 
            <see cref="T:InTheHand.Net.Bluetooth.SizeIndex"/> parts.
            </summary>
            <remarks>
            The <see cref="T:InTheHand.Net.Bluetooth.ElementTypeDescriptor"/> returned is not checked to be a 
            known value.
            </remarks>
            -
            <param name="headerByte">The byte from the header.
            </param>
            <param name="etd">The <see cref="T:InTheHand.Net.Bluetooth.ElementTypeDescriptor"/>
            value from the header byte.
            </param>
            <param name="sizeIndex">The <see cref="T:InTheHand.Net.Bluetooth.SizeIndex"/>
            value from a header byte.
            </param>
            -
            <seealso cref="M:InTheHand.Net.Bluetooth.ServiceRecordParser.GetElementTypeDescriptor(System.Byte)"/>
            <seealso cref="M:InTheHand.Net.Bluetooth.ServiceRecordParser.GetSizeIndex(System.Byte)"/>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.ServiceRecordParser.GetElementTypeDescriptor(System.Byte)">
            <summary>
            Extract the <see cref="T:InTheHand.Net.Bluetooth.ElementTypeDescriptor"/> value from a header byte.
            </summary>
            <remarks>
            The <see cref="T:InTheHand.Net.Bluetooth.ElementTypeDescriptor"/> returned is not checked to be a 
            known value.
            </remarks>
            -
            <param name="headerByte">The byte from the header.
            </param>
            -
            <returns>The value as a <see cref="T:InTheHand.Net.Bluetooth.ElementTypeDescriptor"/>.</returns>
            -
            <seealso cref="M:InTheHand.Net.Bluetooth.ServiceRecordParser.SplitHeaderByte(System.Byte,InTheHand.Net.Bluetooth.ElementTypeDescriptor@,InTheHand.Net.Bluetooth.SizeIndex@)"/>
            <seealso cref="M:InTheHand.Net.Bluetooth.ServiceRecordParser.GetSizeIndex(System.Byte)"/>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.ServiceRecordParser.GetSizeIndex(System.Byte)">
            <summary>
            Extract the <see cref="T:InTheHand.Net.Bluetooth.SizeIndex"/> field from a header byte.
            </summary>
            -
            <param name="headerByte">The byte from the header.
            </param>
            -
            <returns>The value as a <see cref="T:InTheHand.Net.Bluetooth.SizeIndex"/>.</returns>
            -
            <seealso cref="M:InTheHand.Net.Bluetooth.ServiceRecordParser.SplitHeaderByte(System.Byte,InTheHand.Net.Bluetooth.ElementTypeDescriptor@,InTheHand.Net.Bluetooth.SizeIndex@)"/>
            <seealso cref="M:InTheHand.Net.Bluetooth.ServiceRecordParser.GetElementTypeDescriptor(System.Byte)"/>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.ServiceRecordParser.TypeMatchesEtd(InTheHand.Net.Bluetooth.ElementTypeDescriptor,InTheHand.Net.Bluetooth.ElementType)">
            <exclude/>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.ServiceRecordParser.GetEtdForType(InTheHand.Net.Bluetooth.ElementType)">
            <exclude/>
        </member>
        <member name="P:InTheHand.Net.Bluetooth.ServiceRecordParser.SkipUnhandledElementTypes">
            <summary>
            Gets or set whether the parser will attempt to skip any unknown element
            type rather than producing an error.
            </summary>
            -
            <remarks>
            <para>
            An element type is added instead with 
            <c>ElementType.</c><see cref="F:InTheHand.Net.Bluetooth.ElementType.Unknown"/> 
            and <c>ElementTypeDescriptor.</c><see cref="F:InTheHand.Net.Bluetooth.ElementTypeDescriptor.Unknown"/>.
            </para>
            </remarks>
        </member>
        <member name="P:InTheHand.Net.Bluetooth.ServiceRecordParser.LazyUrlCreation">
            <summary>
            Gets or sets whether any URL elements will be converted to 
            <see cref="T:System.Uri"/> instances at parse time, or left as raw byte arrays.
            </summary>
            -
            <remarks><para>
            This is useful when the URL element is badly formatted and thus the
            parser will reject the record, setting this property to <c>true</c> will
            allow the parse to complete without attempting to decode the URL value.
            </para>
            <para>When <c>true</c> the value is stored as a array of bytes, when
            <c>false</c> it is stored as a <see cref="T:System.String"/>;
            however in earlier versions it was stored as <see cref="T:System.Uri"/>,
            and since there was often invalid content on devices (e.g. iPhone)
            this often failed.
            </para>
            </remarks>
        </member>
        <member name="T:InTheHand.Net.Bluetooth.ServiceAttribute">
            <summary>
            Holds an attribute from an SDP service record.
            </summary>
            -
            <remarks>
            Access its SDP Data Element through the 
            <see cref="P:InTheHand.Net.Bluetooth.ServiceElement.Value"/> property and read the 
            data value through the methods and properties on the returned 
            <see cref="T:InTheHand.Net.Bluetooth.ServiceElement"/>.
            </remarks>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.ServiceAttribute.#ctor(InTheHand.Net.Bluetooth.ServiceAttributeId,InTheHand.Net.Bluetooth.ServiceElement)">
            <summary>
            Initializes a new instance of the <see cref="T:InTheHand.Net.Bluetooth.ServiceAttribute"/> class.
            </summary>
            -
            <param name="id">The Attribute Id as a <see cref="T:InTheHand.Net.Bluetooth.ServiceAttributeId"/>.</param>
            <param name="value">The value as a <see cref="T:InTheHand.Net.Bluetooth.ServiceElement"/>.</param>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.ServiceAttribute.#ctor(System.UInt16,InTheHand.Net.Bluetooth.ServiceElement)">
            <summary>
            Initializes a new instance of the <see cref="T:InTheHand.Net.Bluetooth.ServiceAttribute"/> class.
            </summary>
            -
            <param name="id">The Attribute Id as a <see cref="T:System.UInt16"/>.</param>
            <param name="value">The value as a <see cref="T:InTheHand.Net.Bluetooth.ServiceElement"/>.</param>
        </member>
        <member name="P:InTheHand.Net.Bluetooth.ServiceAttribute.Id">
            <summary>
            Get the Attribute Id for this attribute.
            </summary>
            -
            <remarks>
            <note >Id is a <em>unsigned</em> 32-bit integer but we use return it
            is a <em>signed</em> 32-bit integer for CLS Compliance reasons.  It
            should not thus be used for ordering etc, for example 0xFFFF will sort
            before 0x0001 which is backwards.
            </note>
            </remarks>
        </member>
        <member name="P:InTheHand.Net.Bluetooth.ServiceAttribute.IdAsOrdinalNumber">
            <summary>
            Get the Attribute Id as a number, e.g. for comparison.
            </summary>
            -
            <remarks>
            <para>Property <see cref="P:Id"/> should be used as an identifier,
            but not as a number.  That#x2019;s because the range is <em>unsigned</em>
            32-bit integer but we use return it is a <em>signed</em> 32-bit integer.
            Thus an example list will sort as { 0xFFFF, 0x8001, 0x0001, 0x0302 }
            when it should sort as { 0x0001, 0x0302, 0x8001,0xFFFF }
            </para>
            </remarks>
        </member>
        <member name="P:InTheHand.Net.Bluetooth.ServiceAttribute.Value">
            <summary>
            Get the value of this attributes as a <see cref="T:InTheHand.Net.Bluetooth.ServiceElement"/>
            </summary>
        </member>
        <member name="T:InTheHand.Net.Bluetooth.BluetoothWin32RadioEventArgs">
            <summary>
            The base class for classes containing Radio In- and Out-of-Range events.
            </summary>
            -
            <remarks>
            <para>Supported only by the Microsoft stack on desktop Windows.
            </para>
            <para>Produced by class <see cref="T:InTheHand.Net.Bluetooth.BluetoothWin32Events"/>.
            </para>
            </remarks>
        </member>
        <member name="P:InTheHand.Net.Bluetooth.BluetoothWin32RadioEventArgs.Device">
            <summary>
            Gets the device to which the event applies.
            </summary>
        </member>
        <member name="T:InTheHand.Net.Bluetooth.BluetoothWin32RadioOutOfRangeEventArgs">
            <summary>
            The data for Radio Out-of-Range event.
            </summary>
            -
            <remarks>
            <para>Supported only by the Microsoft stack on desktop Windows.
            </para>
            <para>Produced by class <see cref="T:InTheHand.Net.Bluetooth.BluetoothWin32Events"/>.
            </para>
            </remarks>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.BluetoothWin32RadioOutOfRangeEventArgs.ToString">
            <summary>
            Gets a string representation of the event.
            </summary>
            <returns>A string (e.g. contains the device address and name).</returns>
        </member>
        <member name="T:InTheHand.Net.Bluetooth.BluetoothWin32RadioInRangeEventArgs">
            <summary>
            The data for Radio Out-of-Range event.
            </summary>
            -
            <remarks>
            <para>Supported only by the Microsoft stack on desktop Windows.
            </para>
            <para>Produced by class <see cref="T:InTheHand.Net.Bluetooth.BluetoothWin32Events"/>.
            </para>
            </remarks>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.BluetoothWin32RadioInRangeEventArgs.ToString">
            <summary>
            Gets a string representation of the event.
            </summary>
            <returns>A string (e.g. contains the device address, name and the current and previous flags).</returns>
        </member>
        <member name="P:InTheHand.Net.Bluetooth.BluetoothWin32RadioInRangeEventArgs.CurrentState">
            <summary>
            The current state of the device according to the Bluetooth stack.
            </summary>
        </member>
        <member name="P:InTheHand.Net.Bluetooth.BluetoothWin32RadioInRangeEventArgs.PreviousState">
            <summary>
            The previous state of the device according to the Bluetooth stack.
            </summary>
        </member>
        <member name="P:InTheHand.Net.Bluetooth.BluetoothWin32RadioInRangeEventArgs.GainedStates">
            <summary>
            The flags that are set in the current state
            and weren't in the previous state (calculated).
            </summary>
        </member>
        <member name="P:InTheHand.Net.Bluetooth.BluetoothWin32RadioInRangeEventArgs.LostStates">
            <summary>
            The flags that are not set in the current state
            but were in the previous state (calculated).
            </summary>
        </member>
        <member name="T:InTheHand.Net.Bluetooth.BluetoothPublicFactory">
            <summary>
            Provides the means to create Bluetooth classes on the one selected Bluetooth
            stack where multiple are loaded in the same process.
            </summary>
            -
            <remarks>when 
            <para>When calling <c>new BluetoothClient()</c>, <c>new BluetoothListener()</c>,
            etc when multiple Bluetooth stacks are loaded at the same time then the
            instance is created on the primary stack.  This class allows the application
            to select which stack the instance is created on.
            Access this class via property
            <see cref="P:InTheHand.Net.Bluetooth.BluetoothRadio.StackFactory"/>.
            </para>
            </remarks>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.BluetoothPublicFactory.CreateBluetoothClient">
            <overloads>
            Initialise a new instance of the <see cref="T:InTheHand.Net.Sockets.BluetoothClient"/>
            class, using the respective stack and/or radio.
            </overloads>
            -
            <summary>
            Initialise a new instance of the <see cref="T:InTheHand.Net.Sockets.BluetoothClient"/>
            class, using the respective stack and/or radio.
            </summary>
            -
            <returns>The new instance.
            </returns>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.BluetoothPublicFactory.CreateBluetoothClient(InTheHand.Net.BluetoothEndPoint)">
            <summary>
            Initialise a new instance of the <see cref="T:InTheHand.Net.Sockets.BluetoothClient"/> class,
            with the specified local endpoint and
            using the respective stack and/or radio.
            </summary>
            -
            <param name="localEP">See <see cref="M:InTheHand.Net.Sockets.BluetoothClient.#ctor(InTheHand.Net.BluetoothEndPoint)"/>.
            </param>
            -
            <returns>The new instance.
            </returns>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.BluetoothPublicFactory.CreateBluetoothListener(System.Guid)">
            <overloads>
            Initialise a new instance of the <see cref="T:InTheHand.Net.Sockets.BluetoothListener"/>
            class, using the respective stack and/or radio.
            </overloads>
            -
            <summary>
            Initialise a new instance of the <see cref="T:InTheHand.Net.Sockets.BluetoothListener"/>
            class,
            with the specified Service Class Id
            using the respective stack and/or radio.
            </summary>
            -
            <param name="service">See <see cref="M:InTheHand.Net.Sockets.BluetoothListener.#ctor(System.Guid)"/>.
            </param>
            -
            <returns>The new instance.
            </returns>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.BluetoothPublicFactory.CreateBluetoothListener(InTheHand.Net.BluetoothAddress,System.Guid)">
            <summary>
            Initialise a new instance of the <see cref="T:InTheHand.Net.Sockets.BluetoothListener"/>
            class,
            with the specified Service Class Id and local device address
            using the respective stack and/or radio.
            </summary>
            -
            <param name="localAddress">See <see cref="M:InTheHand.Net.Sockets.BluetoothListener.#ctor(InTheHand.Net.BluetoothAddress,System.Guid)"/>.
            </param>
            <param name="service">See <see cref="M:InTheHand.Net.Sockets.BluetoothListener.#ctor(InTheHand.Net.BluetoothAddress,System.Guid)"/>.
            </param>
            -
            <returns>The new instance.
            </returns>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.BluetoothPublicFactory.CreateBluetoothListener(InTheHand.Net.BluetoothEndPoint)">
            <summary>
            Initialise a new instance of the <see cref="T:InTheHand.Net.Sockets.BluetoothListener"/>
            class,
            with the specified Service Class Id and local device address as a
            <see cref="T:InTheHand.Net.BluetoothEndPoint"/>
            using the respective stack and/or radio.
            </summary>
            -
            <param name="localEP">See <see cref="M:InTheHand.Net.Sockets.BluetoothListener.#ctor(InTheHand.Net.BluetoothEndPoint)"/>.
            </param>
            -
            <returns>The new instance.
            </returns>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.BluetoothPublicFactory.CreateBluetoothListener(System.Guid,System.Byte[],System.Int32)">
            <summary>
            Initialise a new instance of the <see cref="T:InTheHand.Net.Sockets.BluetoothListener"/>
            class,
            with the specified Service Class Id and raw Service Record
            using the respective stack and/or radio.
            </summary>
            -
            <param name="service">See <see cref="M:InTheHand.Net.Sockets.BluetoothListener.#ctor(System.Guid,System.Byte[],System.Int32)"/>.
            </param>
            <param name="sdpRecord">See <see cref="M:InTheHand.Net.Sockets.BluetoothListener.#ctor(System.Guid,System.Byte[],System.Int32)"/>.
            </param>
            <param name="channelOffset">See <see cref="M:InTheHand.Net.Sockets.BluetoothListener.#ctor(System.Guid,System.Byte[],System.Int32)"/>.
            </param>
            -
            <returns>The new instance.
            </returns>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.BluetoothPublicFactory.CreateBluetoothListener(InTheHand.Net.BluetoothAddress,System.Guid,System.Byte[],System.Int32)">
            <summary>
            Initialise a new instance of the <see cref="T:InTheHand.Net.Sockets.BluetoothListener"/>
            class,
            with the specified Service Class Id, local device address and raw Service Record
            using the respective stack and/or radio.
            </summary>
            -
            <param name="localAddress">See <see cref="M:InTheHand.Net.Sockets.BluetoothListener.#ctor(InTheHand.Net.BluetoothAddress,System.Guid,System.Byte[],System.Int32)"/>.
            </param>
            <param name="service">See <see cref="M:InTheHand.Net.Sockets.BluetoothListener.#ctor(InTheHand.Net.BluetoothAddress,System.Guid,System.Byte[],System.Int32)"/>.
            </param>
            <param name="sdpRecord">See <see cref="M:InTheHand.Net.Sockets.BluetoothListener.#ctor(InTheHand.Net.BluetoothAddress,System.Guid,System.Byte[],System.Int32)"/>.
            </param>
            <param name="channelOffset">See <see cref="M:InTheHand.Net.Sockets.BluetoothListener.#ctor(InTheHand.Net.BluetoothAddress,System.Guid,System.Byte[],System.Int32)"/>.
            </param>
            -
            <returns>The new instance.
            </returns>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.BluetoothPublicFactory.CreateBluetoothListener(InTheHand.Net.BluetoothEndPoint,System.Byte[],System.Int32)">
            <summary>
            Initialise a new instance of the <see cref="T:InTheHand.Net.Sockets.BluetoothListener"/>
            class,
            with the specified Service Class Id and local device address as a
            <see cref="T:InTheHand.Net.BluetoothEndPoint"/> and raw Service Record
            using the respective stack and/or radio.
            </summary>
            -
            <param name="localEP">See <see cref="M:InTheHand.Net.Sockets.BluetoothListener.#ctor(InTheHand.Net.BluetoothEndPoint,System.Byte[],System.Int32)"/>.
            </param>
            <param name="sdpRecord">See <see cref="M:InTheHand.Net.Sockets.BluetoothListener.#ctor(InTheHand.Net.BluetoothEndPoint,System.Byte[],System.Int32)"/>.
            </param>
            <param name="channelOffset">See <see cref="M:InTheHand.Net.Sockets.BluetoothListener.#ctor(InTheHand.Net.BluetoothEndPoint,System.Byte[],System.Int32)"/>.
            </param>
            -
            <returns>The new instance.
            </returns>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.BluetoothPublicFactory.CreateBluetoothListener(System.Guid,InTheHand.Net.Bluetooth.ServiceRecord)">
            <summary>
            Initialise a new instance of the <see cref="T:InTheHand.Net.Sockets.BluetoothListener"/>
            class,
            with the specified Service Class Id and Service Record
            using the respective stack and/or radio.
            </summary>
            -
            <param name="service">See <see cref="M:InTheHand.Net.Sockets.BluetoothListener.#ctor(System.Guid,InTheHand.Net.Bluetooth.ServiceRecord)"/>.
            </param>
            <param name="sdpRecord">See <see cref="M:InTheHand.Net.Sockets.BluetoothListener.#ctor(System.Guid,InTheHand.Net.Bluetooth.ServiceRecord)"/>.
            </param>
            -
            <returns>The new instance.
            </returns>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.BluetoothPublicFactory.CreateBluetoothListener(InTheHand.Net.BluetoothAddress,System.Guid,InTheHand.Net.Bluetooth.ServiceRecord)">
            <summary>
            Initialise a new instance of the <see cref="T:InTheHand.Net.Sockets.BluetoothListener"/>
            class,
            with the specified Service Class Id, local device address and Service Record
            using the respective stack and/or radio.
            </summary>
            -
            <param name="localAddress">See <see cref="M:InTheHand.Net.Sockets.BluetoothListener.#ctor(InTheHand.Net.BluetoothAddress,System.Guid,InTheHand.Net.Bluetooth.ServiceRecord)"/>.
            </param>
            <param name="service">See <see cref="M:InTheHand.Net.Sockets.BluetoothListener.#ctor(InTheHand.Net.BluetoothAddress,System.Guid,InTheHand.Net.Bluetooth.ServiceRecord)"/>.
            </param>
            <param name="sdpRecord">See <see cref="M:InTheHand.Net.Sockets.BluetoothListener.#ctor(InTheHand.Net.BluetoothAddress,System.Guid,InTheHand.Net.Bluetooth.ServiceRecord)"/>.
            </param>
            -
            <returns>The new instance.
            </returns>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.BluetoothPublicFactory.CreateBluetoothListener(InTheHand.Net.BluetoothEndPoint,InTheHand.Net.Bluetooth.ServiceRecord)">
            <summary>
            Initialise a new instance of the <see cref="T:InTheHand.Net.Sockets.BluetoothListener"/>
            class,
            with the specified Service Class Id and local device address as a
            <see cref="T:InTheHand.Net.BluetoothEndPoint"/> and Service Record
            using the respective stack and/or radio.
            </summary>
            -
            <param name="localEP">See <see cref="M:InTheHand.Net.Sockets.BluetoothListener.#ctor(InTheHand.Net.BluetoothEndPoint,InTheHand.Net.Bluetooth.ServiceRecord)"/>.
            </param>
            <param name="sdpRecord">See <see cref="M:InTheHand.Net.Sockets.BluetoothListener.#ctor(InTheHand.Net.BluetoothEndPoint,InTheHand.Net.Bluetooth.ServiceRecord)"/>.
            </param>
            -
            <returns>The new instance.
            </returns>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.BluetoothPublicFactory.CreateBluetoothDeviceInfo(InTheHand.Net.BluetoothAddress)">
            <summary>
            Initialise a new instance of the <see cref="T:InTheHand.Net.Sockets.BluetoothDeviceInfo"/> class,
            using the respective stack and/or radio.
            </summary>
            -
            <param name="addr">See <see cref="M:InTheHand.Net.Sockets.BluetoothDeviceInfo.#ctor(InTheHand.Net.BluetoothAddress)"/>.
            </param>
            -
            <returns>The new instance.
            </returns>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.BluetoothPublicFactory.CreateObexWebRequest(System.Uri)">
            <summary>
            Initialise a new instance of the <see cref="T:InTheHand.Net.ObexWebRequest"/> class,
            using the respective stack and/or radio.
            </summary>
            -
            <returns>The new instance of <see cref="T:InTheHand.Net.ObexWebRequest"/>.
            </returns>
            -
            <param name="requestUri">See <see cref="M:InTheHand.Net.ObexWebRequest.#ctor(System.Uri)"/>.
            </param>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.BluetoothPublicFactory.CreateObexWebRequest(System.String,InTheHand.Net.BluetoothAddress,System.String)">
            <summary>
            Initialize an instance of this <see cref="T:InTheHand.Net.ObexWebRequest"/> class,
            given a scheme, a Bluetooth Device Address, and a remote path name; 
            using the respective stack and/or radio.
            </summary>
            -
            <param name="scheme">The Uri scheme. One of 
            <c>obex</c>, <c>obex-push</c>, <c>obex-ftp</c>, or <c>obex-sync</c>.
            </param>
            <param name="target">The Bluetooth Device Address of the OBEX server.
            </param>
            <param name="path">The path on the OBEX server.
            </param>
            -
            <returns>The new instance of <see cref="T:InTheHand.Net.ObexWebRequest"/>.
            </returns>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.BluetoothPublicFactory.CreateObexListener">
            <summary>
            Initialise a new instance of the <see cref="T:InTheHand.Net.ObexListener"/> class,
            using the respective stack and/or radio.
            </summary>
            -
            <returns>The new instance of <see cref="T:InTheHand.Net.ObexListener"/>.
            </returns>
        </member>
        <member name="P:InTheHand.Net.Bluetooth.BluetoothPublicFactory.BluetoothSecurity">
            <summary>
            Gets the <see cref="T:InTheHand.Net.Bluetooth.BluetoothSecurity"/>
            instance for the respective stack and/or radio.
            </summary>
            -
            <value>A <see cref="T:InTheHand.Net.Bluetooth.BluetoothSecurity"/>
            as an <see cref="T:InTheHand.Net.Bluetooth.Factory.IBluetoothSecurity"/>
            </value>
        </member>
        <member name="T:InTheHand.Net.Bluetooth.BluetoothAuthenticationMethod">
            <summary>
            The BluetoothAuthenticationMethod enumeration defines the supported
            authentication types during device pairing.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothAuthenticationMethod.Legacy">
            <summary>
            The Bluetooth device supports authentication via a PIN.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothAuthenticationMethod.OutOfBand">
            <summary>
            The Bluetooth device supports authentication via out-of-band data.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothAuthenticationMethod.NumericComparison">
            <summary>
            The Bluetooth device supports authentication via numeric comparison.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothAuthenticationMethod.PasskeyNotification">
            <summary>
            The Bluetooth device supports authentication via passkey notification.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothAuthenticationMethod.Passkey">
            <summary>
            The Bluetooth device supports authentication via passkey.
            </summary>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.Widcomm.IBtIf.SetParent(InTheHand.Net.Bluetooth.Widcomm.WidcommBtInterface)">
            <summary>
            To get to HandleDeviceResponded, HandleInquiryCompleted etc
            </summary>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.Widcomm.IBtIf.StartDiscovery(InTheHand.Net.BluetoothAddress,System.Guid)">
            <summary>
            &#x201C;This function requests a service discovery for a specific device.&#x201D;
            </summary>
            -
            <remarks>
            <para>&#x201C;When the discovery is complete the derived function OnDiscoveryComplete() is called.&#x201D;
            </para>
            </remarks>
            -
            <param name="address"></param>
            <param name="serviceGuid"></param>
            <returns>&#x201C;TRUE, if discovery has started; FALSE, if discovery has not started.&#x201D;</returns>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.Widcomm.IBtIf.GetLastDiscoveryResult(InTheHand.Net.BluetoothAddress@,System.UInt16@)">
            <summary>
            &#x201C;When multiple discovery operations are in progress, the application 
            must call GetLastDiscoveryResult() from within the OnDiscoveryComplete() 
            to determine which remote devices reported services.&#x201D;
            </summary>
            <param name="address"></param>
            <param name="p_num_recs"></param>
            <returns>&#x201C;DISCOVERY_RESULT_SUCCESS, if the discovery operation was successful.&#x201D;</returns>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.Widcomm.IBtIf.ReadDiscoveryRecords(InTheHand.Net.BluetoothAddress,System.Int32,InTheHand.Net.Bluetooth.Widcomm.ServiceDiscoveryParams)">
            <summary>
            &#x201C;This function is called when discovery is complete to retrieve the records 
            received from the remote device.&#x201D;
            </summary>
            -
            <remarks>
            <para>&#x201C;Discovery results for a device are not removed until the device fails to respond to an inquiry.&#x201D;
            </para>
            </remarks>
            -
            <param name="address"></param>
            <param name="maxRecords"></param>
            <param name="args"></param>
            <returns>The discovery records read, which may have recordCount equals zero.</returns>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.Msft.NativeMethods.BluetoothAuthenticateDevice(System.IntPtr,System.IntPtr,InTheHand.Net.Bluetooth.Msft.BLUETOOTH_DEVICE_INFO@,System.String,System.Int32)">
            <summary>
            The BluetoothAuthenticateDevice function sends an authentication request to a remote Bluetooth device.
            </summary>
            <param name="hwndParent">The window to parent the authentication wizard.
            If NULL, the wizard will be parented off the desktop.</param>
            <param name="hRadio">A valid local radio handle, or NULL. If NULL, authentication is attempted on all local radios; if any radio succeeds, the function call succeeds.</param>
            <param name="pbtdi">A structure of type BLUETOOTH_DEVICE_INFO that contains the record of the Bluetooth device to be authenticated.</param>
            <param name="pszPasskey">A Personal Identification Number (PIN) to be used for device authentication. If set to NULL, the user interface is displayed and and the user must follow the authentication process provided in the user interface. If pszPasskey is not NULL, no user interface is displayed. If the passkey is not NULL, it must be a NULL-terminated string. For more information, see the Remarks section.</param>
            <param name="ulPasskeyLength">The size, in characters, of pszPasskey.
            The size of pszPasskey must be less than or equal to BLUETOOTH_MAX_PASSKEY_SIZE.</param>
            <returns></returns>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.Msft.NativeMethods.BluetoothAuthenticateDeviceEx(System.IntPtr,System.IntPtr,InTheHand.Net.Bluetooth.Msft.BLUETOOTH_DEVICE_INFO@,System.Byte[],InTheHand.Net.Bluetooth.BluetoothAuthenticationRequirements)">
            <summary>
            The BluetoothAuthenticateDeviceEx function sends an authentication request to a remote Bluetooth device. Additionally, this function allows for out-of-band data to be passed into the function call for the device being authenticated.
            Note  This API is supported in Windows Vista SP2 and Windows 7.
            </summary>
            <param name="hwndParentIn">The window to parent the authentication wizard.
            If NULL, the wizard will be parented off the desktop.</param>
            <param name="hRadioIn">A valid local radio handle or NULL.
            If NULL, then all radios will be tried. If any of the radios succeed, then the call will succeed.</param>
            <param name="pbtdiInout">A pointer to a BLUETOOTH_DEVICE_INFO structure describing the device being authenticated.</param>
            <param name="pbtOobData">Pointer to device specific out-of-band data to be provided with this API call.
            If NULL, then UI is displayed to continue the authentication process.
            If not NULL, no UI is displayed.</param>
            <param name="authenticationRequirement">An AUTHENTICATION_REQUIREMENTS enumeration that specifies the protection required for authentication.</param>
            <returns></returns>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.Msft.NativeMethods.MsftWin32BthIOCTL.IOCTL_BTH_GET_LOCAL_INFO">
            <summary>
            Input:  none
            Output:  BTH_LOCAL_RADIO_INFO
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.Msft.NativeMethods.MsftWin32BthIOCTL.IOCTL_BTH_GET_RADIO_INFO">
            <summary>
            Input:  BTH_ADDR
            Output:  BTH_RADIO_INFO
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.Msft.NativeMethods.MsftWin32BthIOCTL.IOCTL_BTH_GET_DEVICE_INFO">
             <summary>
             use this ioctl to get a list of cached discovered devices in the port driver.
            
             Input: None
             Output: BTH_DEVICE_INFO_LIST
             </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.Msft.NativeMethods.MsftWin32BthIOCTL.IOCTL_BTH_DISCONNECT_DEVICE">
            <summary>
            Input:  BTH_ADDR
            Output:  none
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.Msft.NativeMethods.MsftWin32BthIOCTL.IOCTL_BTH_GET_DEVICE_RSSI">
            <summary>
            Input:   BTH_GET_DEVICE_RSSI
            Output:  ULONG
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.Msft.NativeMethods.MsftWin32BthIOCTL.IOCTL_BTH_EIR_GET_RECORDS">
            <summary>
            Input:   BTH_EIR_GET_RECORDS
            Output:  UCHAR array, sequence of length + type + data fields triplets.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.Msft.NativeMethods.MsftWin32BthIOCTL.IOCTL_BTH_EIR_SUBMIT_RECORD">
            <summary>
            Input:  BTH_EIR_SUBMIT_RECORD
            Output  HANDLE
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.Msft.NativeMethods.MsftWin32BthIOCTL.IOCTL_BTH_EIR_UPDATE_RECORD">
            <summary>
            Input:  BTH_EIR_SUBMIT_RECORD
            Output  None
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.Msft.NativeMethods.MsftWin32BthIOCTL.IOCTL_BTH_EIR_REMOVE_RECORD">
            <summary>
            Input:   HANDLE
            Output:  None
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.Msft.NativeMethods.MsftWin32BthIOCTL.IOCTL_BTH_HCI_VENDOR_COMMAND">
            <summary>
            Input:   BTH_VENDOR_SPECIFIC_COMMAND 
            Output:  PVOID
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.Msft.NativeMethods.MsftWin32BthIOCTL.IOCTL_BTH_SDP_CONNECT">
            <summary>
            Input:  BTH_SDP_CONNECT
            Output:  BTH_SDP_CONNECT
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.Msft.NativeMethods.MsftWin32BthIOCTL.IOCTL_BTH_SDP_DISCONNECT">
            <summary>
            Input:  HANDLE_SDP
            Output:  none
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.Msft.NativeMethods.MsftWin32BthIOCTL.IOCTL_BTH_SDP_SERVICE_SEARCH">
            <summary>
            Input:  BTH_SDP_SERVICE_SEARCH_REQUEST
            Output:  ULONG * number of handles wanted
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.Msft.NativeMethods.MsftWin32BthIOCTL.IOCTL_BTH_SDP_ATTRIBUTE_SEARCH">
            <summary>
            Input:  BTH_SDP_ATTRIBUTE_SEARCH_REQUEST
            Output:  BTH_SDP_STREAM_RESPONSE or bigger
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.Msft.NativeMethods.MsftWin32BthIOCTL.IOCTL_BTH_SDP_SERVICE_ATTRIBUTE_SEARCH">
            <summary>
            Input:  BTH_SDP_SERVICE_ATTRIBUTE_SEARCH_REQUEST
            Output:  BTH_SDP_STREAM_RESPONSE or bigger
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.Msft.NativeMethods.MsftWin32BthIOCTL.IOCTL_BTH_SDP_SUBMIT_RECORD">
            <summary>
            Input:  raw SDP stream (at least 2 bytes)
            Ouptut: HANDLE_SDP
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.Msft.NativeMethods.MsftWin32BthIOCTL.IOCTL_BTH_SDP_REMOVE_RECORD">
            <summary>
            Input:  HANDLE_SDP
            Output:  none
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.Msft.NativeMethods.MsftWin32BthIOCTL.IOCTL_BTH_SDP_SUBMIT_RECORD_WITH_INFO">
            <summary>
            Input:  BTH_SDP_RECORD + raw SDP record
            Output:  HANDLE_SDP
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.Msft.WSAESETSERVICEOP.RNRSERVICE_REGISTER">
            <summary>
            Register the service. For SAP, this means sending out a periodic broadcast.
            This is an NOP for the DNS namespace.
            For persistent data stores, this means updating the address information. 
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.Msft.WSAESETSERVICEOP.RNRSERVICE_DEREGISTER">
            <summary>
             Remove the service from the registry.
             For SAP, this means stop sending out the periodic broadcast.
             This is an NOP for the DNS namespace.
             For persistent data stores this means deleting address information. 
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.Msft.WSAESETSERVICEOP.RNRSERVICE_DELETE">
            <summary>
            Delete the service from dynamic name and persistent spaces.
            For services represented by multiple CSADDR_INFO structures (using the SERVICE_MULTIPLE flag), only the specified address will be deleted, and this must match exactly the corresponding CSADDR_INFO structure that was specified when the service was registered 
            </summary>
        </member>
        <member name="T:InTheHand.Net.Bluetooth.Factory.IBluetoothRadio">
            <exclude/>
        </member>
        <member name="T:InTheHand.Net.Bluetooth.Factory.DecoratorNetworkStream">
            <exclude/>
        </member>
        <member name="T:InTheHand.Net.Bluetooth.AttributeIds.ObexAttributeId">
            <summary>
            Service Attribute IDs defined by the OBEX related specifications,
            i.e. Object Push and Synchronization Profiles specifications.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.AttributeIds.ObexAttributeId.GoepL2capPsm">
            <summary>
            GOEP L2Cap PSM
            </summary>
            <remarks>
            New in GOEP v2.0 but not numbered there.
            New in OPP v1.2, FTP v1.2, and BIP v1.1.
            <para>[<c>UInt16</c>]</para>
            </remarks>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.AttributeIds.ObexAttributeId.SupportedDataStoresList">
            <summary>
            Supported Data Stores List (Synchronization Profile)
            </summary>
            <remarks>
            Synchronization Profile &#x2014; 
            <see cref="F:InTheHand.Net.Bluetooth.BluetoothService.IrMCSync"/> 
            service class.
            <para>[<c>Data Element Sequence of UInt8</c>]</para>
            <list type="table">
            Values
            <listheader><term>Value</term><description>Meaning</description></listheader>
            <item><term>0x01</term><description>Phonebook</description></item>
            <item><term>0x03</term><description>Calendar</description></item>
            <item><term>0x05</term><description>Notes</description></item>
            <item><term>0x06</term><description>Message</description></item>
            </list>
            </remarks>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.AttributeIds.ObexAttributeId.SupportedFormatsList">
            <summary>
            Supported Formats List (Object Push Profile)
            </summary>
            <remarks>
            Object Push Profile &#x2014; 
            <see cref="F:InTheHand.Net.Bluetooth.BluetoothService.ObexObjectPush"/> 
            service class.
            <para>[<c>Data Element Sequence of UInt8</c>]</para>
            <list type="table">
            Values
            <listheader><term>Value</term><description>Meaning</description></listheader>
            <item><term>0x01</term><description>vCard 2.1</description></item>
            <item><term>0x02</term><description>vCard 3.0</description></item>
            <item><term>0x03</term><description>vCard 2.1</description></item>
            <item><term>0x04</term><description>vCal 1.0</description></item>
            <item><term>0x05</term><description>vNote</description></item>
            <item><term>0x06</term><description>vMessage</description></item>
            <item><term>0xFF</term><description>any type of object</description></item>
            </list>
            </remarks>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.AttributeIds.ObexAttributeId.SupportedCapabilities">
            <summary>
            Supported Capabilities (BIP)
            </summary>
            <remarks>
            Basic Imaging Profile &#x2014; 
            <see cref="F:InTheHand.Net.Bluetooth.BluetoothService.Imaging"/>, 
            <see cref="F:InTheHand.Net.Bluetooth.BluetoothService.ImagingResponder"/>, 
            <see cref="F:InTheHand.Net.Bluetooth.BluetoothService.ImagingAutomaticArchive"/>, 
            <see cref="F:InTheHand.Net.Bluetooth.BluetoothService.ImagingReferenceObjects"/> 
            service classes.
            <para>[<c>UInt8</c>]</para>
            <list type="table">
            Values
            <listheader><term>Value</term><description>Meaning</description></listheader>
            <item><term>Bit 0</term><description>Generic imaging</description></item>
            <item><term>Bit 1</term><description>Capturing</description></item>
            <item><term>Bit 2</term><description>Printing</description></item>
            <item><term>Bit 3</term><description>Displaying</description></item>
            <item><term>Bit 4..7</term><description>Reserved</description></item>
            </list>
            </remarks>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.AttributeIds.ObexAttributeId.SupportedFeatures">
            <summary>
            Supported Features (BIP)
            </summary>
            <remarks>
            Basic Imaging Profile &#x2014; 
            <see cref="F:InTheHand.Net.Bluetooth.BluetoothService.Imaging"/>, 
            <see cref="F:InTheHand.Net.Bluetooth.BluetoothService.ImagingResponder"/>, 
            <see cref="F:InTheHand.Net.Bluetooth.BluetoothService.ImagingAutomaticArchive"/>, 
            <see cref="F:InTheHand.Net.Bluetooth.BluetoothService.ImagingReferenceObjects"/> 
            service classes.
            <para>[<c>UInt16</c>]</para>
            <list type="table">
            Values
            <listheader><term>Value</term><description>Meaning</description></listheader>
            <item><term>Bit 0</term><description>ImagePush</description></item>
            <item><term>Bit 1</term><description>ImagePush-Store</description></item>
            <item><term>Bit 2</term><description>ImagePush-Print</description></item>
            <item><term>Bit 3</term><description>ImagePush-Display</description></item>
            <item><term>Bit 4</term><description>ImagePull</description></item>
            <item><term>Bit 5</term><description>AdvancedImagePrinting</description></item>
            <item><term>Bit 6</term><description>AutomaticArchive</description></item>
            <item><term>Bit 7</term><description>RemoteCamera</description></item>
            <item><term>Bit 8</term><description>RemoteDisplay</description></item>
            <item><term>Bit 9..15</term><description>Reserved</description></item>
            </list>
            </remarks>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.AttributeIds.ObexAttributeId.SupportedFunctions">
            <summary>
            Supported Functions (BIP)
            </summary>
            <remarks>
            Basic Imaging Profile &#x2014; 
            <see cref="F:InTheHand.Net.Bluetooth.BluetoothService.Imaging"/>, 
            <see cref="F:InTheHand.Net.Bluetooth.BluetoothService.ImagingResponder"/>, 
            <see cref="F:InTheHand.Net.Bluetooth.BluetoothService.ImagingAutomaticArchive"/>, 
            <see cref="F:InTheHand.Net.Bluetooth.BluetoothService.ImagingReferenceObjects"/> 
            service classes.
            <para>[<c>UInt32</c>]</para>
            <list type="table">
            Values
            <listheader><term>Value</term><description>Meaning</description></listheader>
            <item><term>Bit 0</term><description>GetCapabilities</description></item>
            <item><term>Bit 1</term><description>PutImage</description></item>
            <item><term>Bit 2</term><description>PutLinkedAttachment</description></item>
            <item><term>Bit 3</term><description>PutLinkedThumbnail</description></item>
            <item><term>Bit 4</term><description>RemoteDisplay</description></item>
            <item><term>Bit 5</term><description>GetImagesList</description></item>
            <item><term>Bit 6</term><description>GetImageProperties</description></item>
            <item><term>Bit 7</term><description>GetImage</description></item>
            <item><term>Bit 8</term><description>GetLinkedThumbnail</description></item>
            <item><term>Bit 9</term><description>GetLinkedAttachment</description></item>
            <item><term>Bit 10</term><description>DeleteImage</description></item>
            <item><term>Bit 11</term><description>StartPrint</description></item>
            <item><term>Bit 12</term><description>Reserved</description></item>
            <item><term>Bit 13</term><description>StartArchive</description></item>
            <item><term>Bit 14</term><description>GetMonitoringImage</description></item>
            <item><term>Bit 16</term><description>GetStatus</description></item>
            <item><term>Bit 15, 17..31</term><description>Reserved</description></item>
            </list>
            </remarks>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.AttributeIds.ObexAttributeId.TotalImagingDataCapacity">
            <summary>
            Total Imaging Data Capacity (BIP)
            </summary>
            <remarks>
            Basic Imaging Profile &#x2014; 
            <see cref="F:InTheHand.Net.Bluetooth.BluetoothService.Imaging"/>, 
            <see cref="F:InTheHand.Net.Bluetooth.BluetoothService.ImagingResponder"/>, 
            <see cref="F:InTheHand.Net.Bluetooth.BluetoothService.ImagingAutomaticArchive"/>, 
            <see cref="F:InTheHand.Net.Bluetooth.BluetoothService.ImagingReferenceObjects"/> 
            service classes.
            <para>[<c>UInt64</c>]</para>
            </remarks>
        </member>
        <member name="T:InTheHand.Net.Bluetooth.AttributeIds.BasicPrintingProfileAttributeId">
            <summary>
            Service Attribute IDs defined by the Basic Printing Profile specification.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.AttributeIds.BasicPrintingProfileAttributeId.DocumentFormatsSupported">
            <summary>
            Document Formats Supported
            </summary>
            <remarks>[<c>String</c>]</remarks>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.AttributeIds.BasicPrintingProfileAttributeId.CharacterRepertoiresSupported">
            <summary>
            Character Repertoires Supported
            </summary>
            <remarks>[<c>UInt128</c>]</remarks>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.AttributeIds.BasicPrintingProfileAttributeId.XhtmlPrintImageFormatsSupported">
            <summary>
            XHTML-Print Image Formats Supported
            </summary>
            <remarks>[<c>String</c>]</remarks>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.AttributeIds.BasicPrintingProfileAttributeId.ColorSupported">
            <summary>
            Color Supported
            </summary>
            <remarks>[<c>Boolean</c>]</remarks>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.AttributeIds.BasicPrintingProfileAttributeId.Model1284Id">
            <summary>
            1284ID
            </summary>
            <remarks>[<c>String</c>]</remarks>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.AttributeIds.BasicPrintingProfileAttributeId.PrinterName">
            <summary>
            Printer Name
            </summary>
            <remarks>[<c>String</c>]</remarks>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.AttributeIds.BasicPrintingProfileAttributeId.PrinterLocation">
            <summary>
            Printer Location
            </summary>
            <remarks>[<c>String</c>]</remarks>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.AttributeIds.BasicPrintingProfileAttributeId.DuplexSupported">
            <summary>
            Duplex Supported
            </summary>
            <remarks>[<c>Boolean</c>]</remarks>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.AttributeIds.BasicPrintingProfileAttributeId.MediaTypesSupported">
            <summary>
            Media Types Supported
            </summary>
            <remarks>[<c>String</c>]</remarks>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.AttributeIds.BasicPrintingProfileAttributeId.MaxMediaWidth">
            <summary>
            MaxMediaWidth
            </summary>
            <remarks>[<c>UInt16</c>]</remarks>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.AttributeIds.BasicPrintingProfileAttributeId.MaxMediaLength">
            <summary>
            MaxMediaLength
            </summary>
            <remarks>[<c>UInt16</c>]</remarks>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.AttributeIds.BasicPrintingProfileAttributeId.EnhancedLayoutSupported">
            <summary>
            Enhanced Layout Supported
            </summary>
            <remarks>[<c>Boolean</c>]</remarks>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.AttributeIds.BasicPrintingProfileAttributeId.RuiFormatsSupported">
            <summary>
            RUI Formats Supported
            </summary>
            <remarks>[<c>String</c>]</remarks>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.AttributeIds.BasicPrintingProfileAttributeId.ReferencePrintingRuiSupported">
            <summary>
            Reference Printing RUI Supported
            </summary>
            <remarks>[<c>Boolean</c>]</remarks>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.AttributeIds.BasicPrintingProfileAttributeId.DirectPrintingRuiSupported">
            <summary>
            Direct Printing RUI Supported
            </summary>
            <remarks>[<c>Boolean</c>]</remarks>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.AttributeIds.BasicPrintingProfileAttributeId.ReferencePrintingTopUrl">
            <summary>
            Reference Printing Top URL
            </summary>
            <remarks>[<c>URL</c>]</remarks>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.AttributeIds.BasicPrintingProfileAttributeId.DirectPrintingTopUrl">
            <summary>
            Direct Printing Top URL
            </summary>
            <remarks>[<c>URL</c>]</remarks>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.AttributeIds.BasicPrintingProfileAttributeId.PrinterAdminRuiTopUrl">
            <summary>
            Printer Admin RUI Top URL
            </summary>
            <remarks>[<c>URL</c>]</remarks>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.AttributeIds.BasicPrintingProfileAttributeId.DeviceName">
            <summary>
            Device Name
            </summary>
            <remarks>[<c>String</c>]</remarks>
        </member>
        <member name="T:InTheHand.Net.Bluetooth.AttributeIds.PersonalAreaNetworkingProfileAttributeId">
            <summary>
            Service Attribute IDs defined by the Personal Area Networking Profile specification.
            </summary>PersonalAreaNetworkingProfile
        </member>
        <member name="F:InTheHand.Net.Bluetooth.AttributeIds.PersonalAreaNetworkingProfileAttributeId.SecurityDescription">
            <summary>
            Security Description
            </summary>
            <remarks>&#x201C;Security Description&#x201D; [<c>UInt16</c>]</remarks>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.AttributeIds.PersonalAreaNetworkingProfileAttributeId.NetAccessType">
            <summary>
            NetAccessType
            </summary>
            <remarks>&#x201C;Type of Network Access Available&#x201D; [<c>UInt16</c>]</remarks>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.AttributeIds.PersonalAreaNetworkingProfileAttributeId.MaxNetAccessRate">
            <summary>
            MaxNetAccessRate
            </summary>
            <remarks>&#x201C;Maximum possible Network Access Data Rate&#x201D; [<c>UInt32</c>]</remarks>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.AttributeIds.PersonalAreaNetworkingProfileAttributeId.IPv4Subnet">
            <summary>
            IPv4Subnet
            </summary>
            <remarks>[<c>String</c>]</remarks>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.AttributeIds.PersonalAreaNetworkingProfileAttributeId.IPv6Subnet">
            <summary>
            IPv6Subnet
            </summary>
            <remarks>[<c>String</c>]</remarks>
        </member>
        <member name="T:InTheHand.Net.Bluetooth.AttributeIds.HeadsetProfileAttributeId">
            <summary>
            Service Attribute IDs defined by the Headset Profile specification.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.AttributeIds.HeadsetProfileAttributeId.RemoteAudioVolumeControl">
            <summary>
            Remote audio volume control
            </summary>
            <remarks>[<c>Boolean</c>]</remarks>
        </member>
        <member name="T:InTheHand.Net.Bluetooth.AttributeIds.HandsFreeProfileAttributeId">
            <summary>
            Service Attribute IDs defined by the Hand-Free Profile specification.
            </summary>HandFreeProfile
        </member>
        <member name="F:InTheHand.Net.Bluetooth.AttributeIds.HandsFreeProfileAttributeId.Network">
            <summary>
            Network
            </summary>
            <remarks>
            <para>&#x201C;The "Network" attribute states, if the AG has the capability 
            to reject incoming calls[4]. This attribute is not encoded as a data element 
            sequence; it is simply an 8-bit unsigned integer. The information given 
            in the “Network” attribute shall be the same as the information given 
            in Bit 5 of the unsolicited result code +BRSF (see Section 4.24.3). An 
            attribute value of 0x00 is translated to a bit value of 0; an attribute 
            value of 0x01 is translated to a bit value of 1.&#x201D;
            </para>
            [<c>UInt8</c>]
            </remarks>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.AttributeIds.HandsFreeProfileAttributeId.SupportedFeatures">
            <summary>
            SupportedFeatures
            </summary>
            <remarks>
            <para>&#x201C;The attribute &#x201C;SupportedFeatures&#x201D; states the features 
            supported in each device. &#x2026;
            The set of features supported in each case is bit-wise defined in this 
            attribute on a yes/no basis. The mapping between the features and their 
            corresponding bits within the attribute is listed below in for the HF 
            and in for the AG. &#x2026;
            <code lang="none">
            Bit     Feature                                                     Default in HF
            (0=LSB)
            0       EC and/or NR function (yes/no, 1 = yes, 0 = no)             0
            1       Call waiting and three way calling(yes/no, 1 = yes, 0 = no) 0
            2       CLI presentation capability (yes/no, 1 = yes, 0 = no)       0
            3       Voice recognition activation (yes/no, 1= yes, 0 = no)       0
            4       Remote volume control (yes/no, 1 = yes, 0 = no)             0
            </code>
            <para>Table 5.2 “SupportedFeatures” attribute bit mapping for the HF</para>
            <code lang="none">
            Bit     Feature                                             Default in AG
            (0=LSB)
            0       Three-way calling (yes/no, 1 = yes, 0 = no)         1
            1       EC and/or NR function (yes/no, 1 = yes, 0 = no)     0
            2       Voice recognition function (yes/no, 1 = yes, 0 = no)    0
            3       In-band ring tone capability (yes/no, 1 = yes, 0 = no)  1
            4       Attach a phone number to a voice tag (yes/no, 1 = yes, 0 = no)  0
            </code>
            Table 5.4 “SupportedFeatures” attribute bit mapping for the AG&#x201D;
            </para>
            [<c>UInt16</c>]</remarks>
        </member>
        <member name="T:InTheHand.Net.Bluetooth.AttributeIds.HealthDeviceAttributeId">
            <summary>
            Service Attribute IDs defined by the Health Device Profile specification.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.AttributeIds.HealthDeviceAttributeId.SupportFeaturesList">
            <summary>
            SupportFeaturesList
            </summary>
            -
            <remarks>
            <para>"This is a sequence for which each element is a sequence that
            describes a single application data end-point on the device. The
            Supported Features attribute (MDEP List) provides an indication of
            the data types that an MDEP supports.",
            "...each description is itself a sequence of three or more elements."
            </para>
            <c>[Sequence]</c>
            </remarks>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.AttributeIds.HealthDeviceAttributeId.DataExchangeSpecification">
            <summary>
            DataExchangeSpecification
            </summary>
            -
            <remarks>
            <para>"This attribute is a one-byte reference, with the value taken
            from the Bluetooth Assigned Numbers [3] to identify the Data Exchange
            Protocol used (e.g. ISO/IEEE 11073-20601 specification)."
            e.g. value 0x01 is ISO/IEEE 11073-20601, "Health informatics - Personal
            health device communication - Application profile - Optimized exchange
            protocol"
            </para>
            <c>[UInt8]</c>
            </remarks>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.AttributeIds.HealthDeviceAttributeId.McapSupportedProcedures">
            <summary>
            MCAP Supported Procedures
            </summary>
            -
            <remarks>
            <para>"This attribute is a one byte bit-mask that indicates the MCAP
            procedures that are supported by this HDP service."
            </para>
            <code lang="none">
            0x02  Supports Reconnect Initiation 3
            0x04  Supports Reconnect Acceptance 4
            0x08  Supports Clock Synchronization Protocol (includes support for at least Sync-Slave Role)
            0x10  Supports Sync-Master Role
            </code>
            <c>[UInt8]</c>
            </remarks>
        </member>
        <member name="T:InTheHand.Net.ObexWebRequestCreate">
            <summary>
            Used to create a new web request for obex uri scheme
            </summary>
        </member>
        <member name="T:InTheHand.Net.IrDAEndPoint">
            <summary>
            Represents an end point for an infrared connection.
            </summary>
            <seealso cref="T:System.Net.IrDAEndPoint"/>
        </member>
        <member name="M:InTheHand.Net.IrDAEndPoint.#ctor(System.Byte[],System.String)">
            <summary>
            Initializes a new instance of the <see cref="T:InTheHand.Net.IrDAEndPoint"/> class.
            </summary>
            <param name="irdaDeviceID">The device identifier.</param>
            <param name="serviceName">The Service Name to connect to/listen on eg "<c>OBEX</c>".
            In the very uncommon case where a connection is to be made to
            / a server is to listen on 
            a specific LSAP-SEL (port number), then use 
            the form "<c>LSAP-SELn</c>", where n is an integer.
            </param>
        </member>
        <member name="M:InTheHand.Net.IrDAEndPoint.#ctor(InTheHand.Net.IrDAAddress,System.String)">
            <summary>
            Initializes a new instance of the <see cref="T:InTheHand.Net.IrDAEndPoint"/> class.
            </summary>
            <param name="irdaDeviceAddress">The device address.</param>
            <param name="serviceName">The Service Name to connect to/listen on eg "<c>OBEX</c>".
            In the very uncommon case where a connection is to be made to
            / a server is to listen on 
            a specific LSAP-SEL (port number), then use 
            the form "<c>LSAP-SELn</c>", where n is an integer.
            </param>
        </member>
        <member name="M:InTheHand.Net.IrDAEndPoint.Serialize">
            <inheritdoc/>
        </member>
        <member name="M:InTheHand.Net.IrDAEndPoint.Create(System.Net.SocketAddress)">
            <inheritdoc/>
        </member>
        <member name="M:InTheHand.Net.IrDAEndPoint.Equals(System.Object)">
            <summary>
            Compares two <see cref="T:InTheHand.Net.IrDAEndPoint"/> instances for equality.
            </summary>
            -
            <param name="obj">The <see cref="T:InTheHand.Net.BluetoothEndPoint"/>
            to compare with the current instance.
            </param>
            -
            <returns><c>true</c> if <paramref name="obj"/>
            is a <see cref="T:InTheHand.Net.IrDAEndPoint"/> and equal to the current instance;
            otherwise, <c>false</c>.
            </returns>
        </member>
        <member name="M:InTheHand.Net.IrDAEndPoint.GetHashCode">
            <summary>
            Returns the hash code for this instance.
            </summary>
            <returns>A hash code for the current object.</returns>
        </member>
        <member name="M:InTheHand.Net.IrDAEndPoint.ToString">
            <summary>
            Returns the string representation of the IrDAEndPoint.
            </summary>
            <remarks>
            <para>
            The string is in format <c>&lt;DeviceAddress&gt;:&lt;ServiceName&gt;</c>
            </para>
            An example is:
            <code lang="none">"04E20304:OBEX"</code>
            </remarks>
            <returns>The string representation of the IrDAEndPoint.</returns>
        </member>
        <member name="P:InTheHand.Net.IrDAEndPoint.Address">
            <summary>
            Gets or sets an address for the device.
            </summary>
        </member>
        <member name="P:InTheHand.Net.IrDAEndPoint.DeviceID">
            <summary>
            Gets or sets an identifier for the device.
            </summary>
            <exception cref="T:System.ArgumentNullException">
            The specified byte array is null (<c>Nothing</c> in Visual Basic).
            </exception>
            <exception cref="T:System.ArgumentOutOfRangeException">
            The specified byte array is not four bytes long.
            </exception>
        </member>
        <member name="P:InTheHand.Net.IrDAEndPoint.ServiceName">
            <summary>
            Gets or sets the name of the service.
            </summary>
        </member>
        <member name="P:InTheHand.Net.IrDAEndPoint.AddressFamily">
            <summary>
            Gets the address family to which the endpoint belongs.
            </summary>
        </member>
        <member name="T:InTheHand.Net.Bluetooth.RadioModes">
            <summary>
            Determine the status of the radio, whether the radio is individually
            powered-up/down, connectable, and/or discoverable.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.RadioModes.Unknown">
            <summary>
            Unknown.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.RadioModes.Discoverable">
            <summary>
            Remote devices can discover the radio.
            </summary>
            -
            <remarks>
            <para>If the radio is <see cref="F:InTheHand.Net.Bluetooth.RadioModes.PowerOff"/>
            it is undefined how
            <see cref="F:InTheHand.Net.Bluetooth.RadioModes.Connectable"/>
            and <see cref="F:InTheHand.Net.Bluetooth.RadioModes.Discoverable"/>
            are reported.  Different stacks behave differently.
            </para>
            </remarks>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.RadioModes.Connectable">
            <summary>
            Remote devices can connect to the radio.
            </summary>
            -
            <remarks>
            <para>If the radio is <see cref="F:InTheHand.Net.Bluetooth.RadioModes.PowerOff"/>
            it is undefined how
            <see cref="F:InTheHand.Net.Bluetooth.RadioModes.Connectable"/>
            and <see cref="F:InTheHand.Net.Bluetooth.RadioModes.Discoverable"/>
            are reported.  Different stacks behave differently.
            </para>
            </remarks>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.RadioModes.PowerOff">
            <summary>
            The radio is powered-down and thus cannot connect to remote devices.
            </summary>
            -
            <remarks>
            <note>Not all stacks report whether the radio is powered-up or down.
            Thus there are cases where neither <see cref="F:InTheHand.Net.Bluetooth.RadioModes.PowerOff"/>
            and <see cref="F:InTheHand.Net.Bluetooth.RadioModes.PowerOn"/> will be set.
            Similarly not all stacks allow the program to control powering down
            the radio.
            </note>
            <para>If the radio is <see cref="F:InTheHand.Net.Bluetooth.RadioModes.PowerOff"/>
            it is undefined whether
            <see cref="F:InTheHand.Net.Bluetooth.RadioModes.Connectable"/>
            and <see cref="F:InTheHand.Net.Bluetooth.RadioModes.Discoverable"/>
            are reported.  Different stacks behave differently.
            </para>
            </remarks>
            -
            <seealso cref="F:InTheHand.Net.Bluetooth.RadioModes.PowerOn"/>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.RadioModes.PowerOn">
            <summary>
            The radio is powered-up and thus can connect to remote devices.
            </summary>
            -
            <remarks>
            <note>Not all stacks report whether the radio is powered-up or down.
            Thus there are cases where neither <see cref="F:InTheHand.Net.Bluetooth.RadioModes.PowerOff"/>
            and <see cref="F:InTheHand.Net.Bluetooth.RadioModes.PowerOn"/> will be set.
            Similarly not all stacks allow the program to control powering down
            the radio.
            </note>
            </remarks>
            -
            <seealso cref="F:InTheHand.Net.Bluetooth.RadioModes.PowerOff"/>
        </member>
        <member name="T:InTheHand.Net.Bluetooth.LmpExtendedFeatures">
            <summary>
            Entered from v4.0 spec.
            Volume 2, Part C 'LMP', Section 3.4.
            </summary>
            --
            <remarks>
            <para>The format of the summary for each entry is:
            "NUM Text BYTE BIT".
            Where NUM is the bit number, so starting from 64, as these value
            follow those in <see cref="E:InTheHand.Net.Bluetooth.LmpFeatures"/>,
            and where BYTE and BIT is the position of the bit in this 64-bit value.
            </para>
            </remarks>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.LmpExtendedFeatures.SecureSimplePairing_HostSupport">
            <summary>
            64 Secure Simple Pairing (Host Support) 0 0
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.LmpExtendedFeatures.LeSupported_Host">
            <summary>
            65 LE Supported (Host) 0 1
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.LmpExtendedFeatures.SimultaneousLeAndBeEdrToSameDeviceCapable_Host">
            <summary>
            66 Simultaneous LE and BR/EDR to Same Device Capable (Host) 0 2
            </summary>
        </member>
        <member name="T:InTheHand.Net.Bluetooth.BluetoothComponent">
             <summary>
             Provides simple access to asynchronous methods on Bluetooth features, for
             instance to background device discovery.
             </summary>
             -
             <example>
             <code lang="VB.NET">
             Public Sub DiscoDevicesAsync()
                 Dim bco As New BluetoothComponent()
                 AddHandler bco.DiscoverDevicesProgress, AddressOf HandleDiscoDevicesProgress
                 AddHandler bco.DiscoverDevicesComplete, AddressOf HandleDiscoDevicesComplete
                 bco.DiscoverDevicesAsync(255, True, True, True, False, 99)
             End Sub
            
             Private Sub HandleDiscoDevicesProgress(ByVal sender As Object, ByVal e As DiscoverDevicesEventArgs)
                 Console.WriteLine("DiscoDevicesAsync Progress found {0} devices.", e.Devices.Length)
             End Sub
            
             Private Sub HandleDiscoDevicesComplete(ByVal sender As Object, ByVal e As DiscoverDevicesEventArgs)
                 Debug.Assert(CInt(e.UserState) = 99)
                 If e.Cancelled Then
                     Console.WriteLine("DiscoDevicesAsync cancelled.")
                 ElseIf e.Error IsNot Nothing Then
                     Console.WriteLine("DiscoDevicesAsync error: {0}.", e.Error.Message)
                 Else
                     Console.WriteLine("DiscoDevicesAsync complete found {0} devices.", e.Devices.Length)
                 End If
             End Sub
             </code>
             </example>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.BluetoothComponent.#ctor">
            <summary>
            Initializes a new instance of the <see cref="T:InTheHand.Net.Bluetooth.BluetoothComponent"/> class.
            </summary>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.BluetoothComponent.#ctor(InTheHand.Net.Sockets.BluetoothClient)">
            <summary>
            Initializes a new instance of the <see cref="T:InTheHand.Net.Bluetooth.BluetoothComponent"/> class.
            </summary>
            -
            <param name="cli">A <see cref="T:InTheHand.Net.Sockets.BluetoothClient"/> 
            instance to use to run discovery on.  Must be non-null.
            </param>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.BluetoothComponent.Dispose(System.Boolean)">
            <summary>
            Optionally disposes of the managed resources used by the
            <see cref="T:InTheHand.Net.Bluetooth.BluetoothComponent"/> class.
            </summary>
            <param name="disposing"><c>true</c> to release both managed and unmanaged
            resources; <c>false</c> to release only unmanaged resources.
            </param>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.BluetoothComponent.OnDiscoveryComplete(InTheHand.Net.Bluetooth.DiscoverDevicesEventArgs)">
            <summary>
            Raises the <see cref="E:InTheHand.Net.Bluetooth.BluetoothComponent.DiscoverDevicesComplete"/> event.
            </summary>
            <param name="e">A <see cref="T:InTheHand.Net.Bluetooth.DiscoverDevicesEventArgs"/>
            object that contains event data.
            </param>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.BluetoothComponent.OnDiscoveryProgress(InTheHand.Net.Bluetooth.DiscoverDevicesEventArgs)">
            <summary>
            Raises the <see cref="E:InTheHand.Net.Bluetooth.BluetoothComponent.DiscoverDevicesProgress"/> event.
            </summary>
            <param name="e">A <see cref="T:InTheHand.Net.Bluetooth.DiscoverDevicesEventArgs"/>
            object that contains event data.
            </param>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.BluetoothComponent.DiscoverDevicesAsync(System.Int32,System.Boolean,System.Boolean,System.Boolean,System.Boolean,System.Object)">
            <summary>
            Discovers accessible Bluetooth devices and returns their names and addresses.
            This method does not block the calling thread.
            </summary>
            -
            <remarks>
            <para>See <see cref="M:InTheHand.Net.Sockets.BluetoothClient.DiscoverDevices(System.Int32,System.Boolean,System.Boolean,System.Boolean,System.Boolean)"/>
            for more information.
            </para>
            <para>The devices are presented in the <see cref="E:InTheHand.Net.Bluetooth.BluetoothComponent.DiscoverDevicesComplete"/>
            and <see cref="E:InTheHand.Net.Bluetooth.BluetoothComponent.DiscoverDevicesProgress"/> events.
            </para>
            </remarks>
            -
            <param name="maxDevices">The maximum number of devices to get information about.
            </param>
            <param name="authenticated">True to return previously authenticated/paired devices.
            </param>
            <param name="remembered">True to return remembered devices.
            </param>
            <param name="unknown">True to return previously unknown devices.
            </param>
            <param name="discoverableOnly">True to return only the devices that 
            are in range, and in    discoverable mode.  See the remarks section.
            </param>
            <param name="state">A user-defined object that is passed to the method
            invoked when the asynchronous operation completes.
            </param>
            -
            <returns>An array of BluetoothDeviceInfo objects describing the devices discovered.</returns>
        </member>
        <member name="E:InTheHand.Net.Bluetooth.BluetoothComponent.DiscoverDevicesComplete">
            <summary>
            Occurs when an device discovery operation completes.
            </summary>
            -
            <remarks>
            <para>This event is raised at the end of the discovery process
            and lists all the discovered devices.
            </para>
            </remarks>
            -
            <seealso cref="E:InTheHand.Net.Bluetooth.BluetoothComponent.DiscoverDevicesProgress"/>
        </member>
        <member name="E:InTheHand.Net.Bluetooth.BluetoothComponent.DiscoverDevicesProgress">
            <summary>
            Occurs during an device discovery operation
            to show one or more new devices.
            </summary>
            -
            <remarks>
            <para>This event is raised for all discovered devices, both the
            known devices which are presented first, if requested,
            as well as newly discovery device found by the inquiry process,
            again if requested.
            </para>
            <para>Note that any event instance may include one or more devices.  Note
            also that a particular device may be presented more than one time;
            including once from the &#x2018;known&#x2019; list, once when a
            device is dicovered, and possibly another time when the discovery
            process retrieves the new device&#x2019;s Device Name.
            </para>
            </remarks>
            -
            <seealso cref="E:InTheHand.Net.Bluetooth.BluetoothComponent.DiscoverDevicesComplete"/>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.Widcomm.WidcommBtInterface.DeleteKnownDevice(InTheHand.Net.BluetoothAddress)">
            <summary>
            Remove the device by deleting it from the Registry.
            </summary>
            <param name="device">The device address.</param>
            <returns>Whether the device is deleted -- it is no longer a remembered device.
            </returns>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.Widcomm.WidcommBtInterface.GetExtendedError">
            <summary>
            Call CBtIf::GetExtendedError.
            </summary>
            -
            <remarks>
            <para>Is not currently used anywhere...
            </para>
            <para>Not supported on Widcomm WCE WM/WinCE, we (natively) return -1.
            </para>
            </remarks>
            -
            <returns>A <see cref="T:InTheHand.Net.Bluetooth.Widcomm.WBtRc"/> value.</returns>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.Widcomm.WidcommBtInterface.IsRemoteDevicePresent(System.Byte[])">
            <summary>
            CBtIf::IsRemoteDevicePresent
            </summary>
            -
            <remarks>
            <note>"added BTW and SDK 5.0.1.1000"</note>
            <note>"added BTW-CE and SDK 1.7.1.2700"</note>
            </remarks>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.Widcomm.WidcommBtInterface.IsRemoteDeviceConnected(System.Byte[])">
            <summary>
            CBtIf::IsRemoteDeviceConnected
            </summary>
            -
            <remarks>
            <note>"added BTW 5.0.1.300, SDK 5.0"</note>
            <note>"added BTW-CE and SDK 1.7.1.2700"</note>
            </remarks>
        </member>
        <member name="T:InTheHand.Net.Bluetooth.Factory.CommonBluetoothInquiry`1">
            <exclude/>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.Factory.CommonBluetoothInquiry`1.InquiryTimeoutParams.InquiryLengthAsMiliseconds">
            <summary>
            Get timeout value in Int32 milliseconds,
            as NETCF <c>WaitHandle.WaitOne</c> can't use TimeSpan.
            </summary>
            -
            <returns>An Int32 containing the timeout value in milliseconds.
            </returns>
        </member>
        <member name="T:InTheHand.Net.Bluetooth.Msft.BTHNS_RESULT">
            <summary>
            Bluetooth specific flags returned from WSALookupServiceNext 
            in WSAQUERYSET.dwOutputFlags in response to device inquiry.
            </summary>
        </member>
        <member name="T:InTheHand.Net.Bluetooth.Factory.BluetoothFactory">
            <exclude/>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.Factory.BluetoothFactory.GetTheFactoryOfTypeOrDefault``1">
            <summary>
            PRE-RELEASE
            Get the instance of the given factory type -- if it exists.
            </summary>
            -
            <typeparam name="TFactory">The factory type e.g.
            <see cref="T:InTheHand.Net.Bluetooth.SocketsBluetoothFactory"/>
            or <see cref="T:InTheHand.Net.Bluetooth.Widcomm.WidcommBluetoothFactoryBase"/>
            etc.
            </typeparam>
            -
            <returns>The instance of the given type or <c>null</c>.
            </returns>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.Factory.BluetoothFactory.GetTheFactoryOfTypeOrDefault(System.Type)">
            <summary>
            PRE-RELEASE
            Get the instance of the given factory type -- if it exists.
            </summary>
            -
            <param name="factoryType">The factory type e.g.
            <see cref="T:InTheHand.Net.Bluetooth.SocketsBluetoothFactory"/>
            or <see cref="T:InTheHand.Net.Bluetooth.Widcomm.WidcommBluetoothFactoryBase"/>
            etc.
            </param>
            -
            <returns>The instance of the given type or <c>null</c>.
            </returns>
        </member>
        <member name="T:InTheHand.Net.Bluetooth.Msft.BTHNS_BLOB">
            <summary>
            
            </summary>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.Msft.BTHNS_BLOB.ToByteArray">
            <summary>
            Internal bytes
            </summary>
            <returns></returns>
        </member>
        <member name="P:InTheHand.Net.Bluetooth.Msft.BTHNS_BLOB.Length">
            <summary>
            Size of the structure.
            </summary>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.BlueSoleil.NativeMethods.Btsdk_UpdateRemoteDeviceName(System.UInt32,System.Byte[],System.UInt16@)">
            <summary>
            Gets the current user-friendly name of the specified remote device.
            </summary>
            -
            <remarks>
            Before calling Btsdk_UpdateRemoteDeviceName, the device database must be initialized by a
            previous successful call to Btsdk_StartBluetooth.
            The user-friendly device name is a UTF-8 character string. The device name acquired by this
            command is stored automatically in the device database.
            </remarks>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.BlueSoleil.NativeMethods.Btsdk_GetRemoteLinkQuality(System.UInt32,System.UInt16@)">
            <summary>
            "gets the current link quality value of the connection between local
            device and the specified remote device."
            </summary>
            -
            <remarks>"The higher the value, the better the link quality is."
            </remarks>
            -
            <returns>"Range: 0 to 0xFF."
            </returns>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.BlueSoleil.NativeMethods.Btsdk_GetRemoteDeviceName(System.UInt32,System.Byte[],System.UInt16@)">
            <summary>
            "Gets the user-friendly name of the specified remote device from the device database."
            </summary>
            -
            <remarks>
            "Before calling Btsdk_GetRemoteDeviceName, the device database must be initialized by a
            previous successful call to Btsdk_Init.
            The user-friendly device name is a UTF-8 character string. The Btsdk_GetRemoteDeviceNamefunction returns =BTSDK_OPERATION_FAILURE immediately if the device name doesn’t
            exist in the database. In this case, the application shall call Btsdk_UpdateRemoteDeviceName
            to acquire the name information directly from the remote device.
            BlueSoleil will automatically update the device name when the local device connects to the
            specified remote device.
            </remarks>
        </member>
        <member name="T:InTheHand.Net.ObexMethod">
            <summary>
            Methods which can be carried out in an Object Exchange transaction.
            </summary>
        </member>
        <member name="F:InTheHand.Net.ObexMethod.Put">
            <summary>
            Sends an object to a receiving device.
            </summary>
        </member>
        <member name="F:InTheHand.Net.ObexMethod.Get">
            <summary>
            Requests a file from the remote device.
            </summary>
        </member>
        <member name="F:InTheHand.Net.ObexMethod.Connect">
            <summary>
            Negotiate an Object Exchange connection with a remote device.
            </summary>
        </member>
        <member name="F:InTheHand.Net.ObexMethod.Disconnect">
            <summary>
            Disconnect an existing Object Exchange session.
            </summary>
        </member>
        <member name="F:InTheHand.Net.ObexMethod.PutFinal">
            <summary>
            Sends the last packet of an object to a receiving device.
            </summary>
        </member>
        <member name="F:InTheHand.Net.ObexMethod.SetPath">
            <summary>
            Change remote path on an Object Exchange server.
            </summary>
        </member>
        <member name="T:InTheHand.Net.Sockets.IrDAClient">
            <summary>
            Makes connections to services on peer IrDA devices.
            </summary>
            -
            <remarks>
            <para>Makes connections to services on peer IrDA devices.  It allows 
            discovery of all devices in range, then a connection can be made to 
            the required service on the chosen peer.  Or, given just the 
            service name a connection will be made to an arbitrary peer.  This is 
            most useful when it is expected that there will be only one device in 
            range—as is often the case.</para>
            <para>It can be used with both the full and Compact frameworks, and can 
            be used as a replacement for the latter's built-in version simply by 
            changing the referenced namespace and assembly.
            It also has features extra 
            to those in the CF's version.  For instance, following the 
            pattern of <see cref="T:System.Net.Sockets.TcpClient"/> in framework 
            version 2, it provides access to the underlying 
            <see cref="T:System.Net.Sockets.Socket"/> via a <c>Client</c> 
            property.  This is particularly useful as it allows setting socket 
            options, for instance IrCOMM Cooked mode with option <see 
            cref="F:InTheHand.Net.Sockets.IrDASocketOptionName.NineWireMode"/>.
            </para>
            <para>There a number of well-known services, a few are listed here.
            <list type="bullet">
            <listheader><term>Service description</term>
                <description>Service Name, Protocol type</description></listheader>
            <item><term>OBEX file transfer</term>
                <description>OBEX:IrXfer, (TinyTP)</description></item>
            <item><term>OBEX general</term>
                <description>OBEX, (TinyTP)</description></item>
            <item><term>Printing</term>
                <description>IrLPT, IrLMP mode</description></item>
            <item><term>IrCOMM e.g. to modems</term>
                <description>IrDA:IrCOMM, IrCOMM 9-Wire/Cooked mode</description></item>
            </list>
            The modes required by the last two are set by socket option, as noted 
            for IrCOMM above.
            </para>
            <para>
            Of course the library also includes specific OBEX protocol support, both 
            client and server, see <see cref="T:InTheHand.Net.ObexWebRequest"/> etc.
            </para>
            </remarks>
            -
            <example>Example code to connect to a IrCOMM service would be as 
            follows.
            <code lang="VB.NET">
            Public Shared Sub Main()
              Dim cli As New IrDAClient
              ' Set IrCOMM Cooked/9-wire mode.
              cli.Client.SetSocketOption(IrDASocketOptionLevel.IrLmp, _
                IrDASocketOptionName.NineWireMode, _
                1)  ' equivalent to 'True'
              ' Connect
              cli.Connect("IrDA:IrCOMM")
              ' Connected, now send and receive e.g. by using the 
              ' NetworkStream returned by cli.GetStream
              ...
            End Sub
            </code>
            </example>
            -
            <seealso cref="N:InTheHand.Net.Sockets"/>
            <seealso cref="T:System.Net.Sockets.IrDAClient"/>
        </member>
        <member name="M:InTheHand.Net.Sockets.IrDAClient.#ctor">
            <overloads>
            Initializes a new instance of the <see cref="T:InTheHand.Net.Sockets.IrDAClient"/> class,
            and optionally connects to a peer device.
            </overloads>
            ----
            <summary>
            Initializes a new instance of the <see cref="T:InTheHand.Net.Sockets.IrDAClient"/> class.
            </summary>
            <remarks>
            <para>
            It then allows discovery of all devices in range using <see cref="M:InTheHand.Net.Sockets.IrDAClient.DiscoverDevices"/>, then a 
            connection can be made to the  required service on the chosen peer using <see cref="M:InTheHand.Net.Sockets.IrDAClient.Connect(InTheHand.Net.IrDAEndPoint)"/>.
            Or, given just the  service name a connection will be made to an arbitrary 
            peer, using <see cref="M:InTheHand.Net.Sockets.IrDAClient.Connect(System.String)"/>.  This is 
            most useful when it is expected that there will be only one device in 
            range — as is often the case.</para>
            </remarks>
        </member>
        <member name="M:InTheHand.Net.Sockets.IrDAClient.#ctor(System.String)">
            <summary>
            Initializes a new instance of the <see cref="T:InTheHand.Net.Sockets.IrDAClient"/> 
            class and connects to the specified service name.
            </summary>
            -
            <remarks>
            <para>This is 
            equivalent to calling the default constructor followed by 
            <see cref="M:InTheHand.Net.Sockets.IrDAClient.Connect(System.String)"/>.      
            </para>
            <para>
            As noted the connection will be made to an arbitrary peer.  This is 
            most useful when it is expected that there will be only one device in 
            range &#x2014; as is often the case.  If a connection is to be made to
            a particular remote peer, then use the 
            <see cref="M:InTheHand.Net.Sockets.IrDAClient.#ctor(InTheHand.Net.IrDAEndPoint)"/>
            overload.
            </para>
            <para>
            Infrared connections are made by specifying a Service Name, which can 
            be any value provided the participating devices refer the same name.
            </para>
            <para>
            See <see cref="M:InTheHand.Net.Sockets.IrDAClient.Connect(System.String)"/> 
            for the errors that can occur.
            </para>
            </remarks>
            -
            <param name="service">
            A <see cref="T:System.String"/> containing the service name to connect to.
            </param>
        </member>
        <member name="M:InTheHand.Net.Sockets.IrDAClient.#ctor(InTheHand.Net.IrDAEndPoint)">
            <summary>
            Initializes a new instance of the <see cref="T:InTheHand.Net.Sockets.IrDAClient"/> 
            class and connects to the specified endpoint.
            </summary>
            <remarks>
            <para>
            This is 
            equivalent to calling the default constructor followed by 
            <see cref="M:InTheHand.Net.Sockets.IrDAClient.Connect(InTheHand.Net.IrDAEndPoint)"/>.
            </para>
            <para>
            The endpoint specifies both the peer device and service name 
            to connect to.  If only one device is expected to be in range, or 
            an arbitrary peer device is suitable, then one can use 
            <see cref="M:InTheHand.Net.Sockets.IrDAClient.#ctor(System.String)"/> instead.
            </para>
            </remarks>
            <param name="remoteEP">
            An <see cref="T:InTheHand.Net.IrDAEndPoint"/> initialised with the address of the peer
            device and the service name to connect to.
            </param>
        </member>
        <member name="M:InTheHand.Net.Sockets.IrDAClient.DiscoverDevices">
            <summary>
            Obtains information about available devices.
            </summary>
            -
            <remarks>
            <para>Returns a maximum of 8 devices, for more flexibility use the other overloads.</para>
            </remarks>
            -
            <returns>The discovered devices as an array of <see cref="T:InTheHand.Net.Sockets.IrDADeviceInfo"/>.</returns>
        </member>
        <member name="M:InTheHand.Net.Sockets.IrDAClient.DiscoverDevices(System.Int32)">
            <summary>
            Obtains information about a specified number of devices.
            </summary>
            -
            <param name="maxDevices">The maximum number of devices to get information about.</param>
            -
            <returns>The discovered devices as an array of <see cref="T:InTheHand.Net.Sockets.IrDADeviceInfo"/>.</returns>
        </member>
        <member name="M:InTheHand.Net.Sockets.IrDAClient.DiscoverDevices(System.Int32,System.Net.Sockets.Socket)">
            <summary>
            Obtains information about available devices using a socket.
            </summary>
            -
            <param name="maxDevices">The maximum number of devices to get information about.</param>
            <param name="irdaSocket">A <see cref="T:System.Net.Sockets.Socket"/>
            to be uses to run the discovery process.
            It should have been created for the IrDA protocol</param>
            -
            <returns>The discovered devices as an array of <see cref="T:InTheHand.Net.Sockets.IrDADeviceInfo"/>.</returns>
        </member>
        <member name="M:InTheHand.Net.Sockets.IrDAClient.ParseDeviceList(System.Byte[])">
            <exclude/>
        </member>
        <member name="M:InTheHand.Net.Sockets.IrDAClient.GetRemoteMachineName(System.Net.Sockets.Socket)">
            <summary>
            Gets the name of the peer device using the specified socket.
            </summary>
            <param name="irdaSocket">A connected IrDA <c>Socket</c>.</param>
            <returns>The name of the remote device.</returns>
            -
            <remarks>
            This finds the name of the device to which the socket is connection, 
            an exception will occur if the socket is not connected.
            </remarks>
            -
            <exception cref="T:System.ArgumentNullException">
            <c>s</c> is null (<c>Nothing</c> in Visual Basic).
            </exception>
            <exception cref="T:System.ArgumentOutOfRangeException">
            The remote device is not present in the list of discovered devices.
            </exception>
            <exception cref="T:System.InvalidOperationException">
            The socket is not connected.
            </exception>
        </member>
        <member name="M:InTheHand.Net.Sockets.IrDAClient.Connect(InTheHand.Net.IrDAEndPoint)">
            <overloads>
            Forms a connection to the specified peer service.
            </overloads>
            --
            <summary>
            Forms a connection to the specified endpoint.
            </summary>
            <remarks>
            <para>
            The endpoint specifies both the peer device and service name 
            to connect to.  If only one device is expected to be in range, or 
            an arbitrary peer device is suitable, then one can use 
            <see cref="M:InTheHand.Net.Sockets.IrDAClient.Connect(System.String)"/> instead.
            </para>
            </remarks>
            <param name="remoteEP">
            An <see cref="T:InTheHand.Net.IrDAEndPoint"/> initialised with the address of the peer
            device and the service name to connect to.
            </param>
        </member>
        <member name="M:InTheHand.Net.Sockets.IrDAClient.Connect(System.String)">
            <summary>
            Forms a connection to the specified service on an arbitrary peer.
            </summary>
            <remarks>
            As noted the connection will be made to an arbitrary peer.  This is 
            most useful when it is expected that there will be only one device in 
            range &#x2014; as is often the case.  If a connection is to be made to
            a particular remote peer, then use 
            <see cref="M:InTheHand.Net.Sockets.IrDAClient.Connect(InTheHand.Net.IrDAEndPoint)"/>.
            </remarks>
            <param name="service">The Service Name to connect to eg "<c>OBEX</c>".
            In the very uncommon case where a connection is to be made to a 
            specific LSAP-SEL (port number), then use 
            the form "<c>LSAP-SELn</c>", where n is an integer.</param>
            -
            <exception cref="T:System.InvalidOperationException">
            No peer IrDA device was found.  The exception has message &#x201C;No device&#x201D;.
            </exception>
            <exception cref="T:System.Net.Sockets.SocketException">
            A connection could not be formed.  See the exception message or 
            <see cref="P:System.Net.Sockets.SocketException.SocketErrorCode"/> 
            (or <see cref="P:System.Net.Sockets.SocketException.ErrorCode"/> on NETCF) 
            for what error occurred.
            </exception>
        </member>
        <member name="M:InTheHand.Net.Sockets.IrDAClient.BeginConnect(InTheHand.Net.IrDAEndPoint,System.AsyncCallback,System.Object)">
            <overloads>
            Begins an asynchronous request for a remote host connection.
            </overloads>
            -
            <summary>
            Begins an asynchronous request for a remote host connection.
            The remote host is specified by an endpoint. 
            </summary>
            -
            <param name="remoteEP">
            An <see cref="T:InTheHand.Net.IrDAEndPoint"/> initialised with the address of the peer
            device and the service name to connect to.
            </param>
            <param name="requestCallback">An AsyncCallback delegate that references the method to invoke when the operation is complete.</param>
            <param name="state">A user-defined object that contains information about the connect operation.
            This object is passed to the requestCallback delegate when the operation is complete.</param>
            -
            <returns>An <see cref="T:System.IAsyncResult"/> that represents the 
            asynchronous connect, which could still be pending.
            </returns>
        </member>
        <member name="M:InTheHand.Net.Sockets.IrDAClient.BeginConnect(System.String,System.AsyncCallback,System.Object)">
            <summary>
            Begins an asynchronous request for a remote host connection.
            The remote host is specified by a service name (string). 
            </summary>
            -
            <param name="service">The service name of the remote host.</param>
            <param name="requestCallback">An AsyncCallback delegate that references the method to invoke when the operation is complete.</param>
            <param name="state">A user-defined object that contains information about the connect operation.
            This object is passed to the requestCallback delegate when the operation is complete.</param>
            -
            <returns>An <see cref="T:System.IAsyncResult"/> that represents the 
            asynchronous connect, which could still be pending.
            </returns>
            -
            <remarks>
            <para>
            See <see cref="M:InTheHand.Net.Sockets.IrDAClient.Connect(System.String)"/> 
            for the errors that can occur.
            </para>
            </remarks>
        </member>
        <member name="M:InTheHand.Net.Sockets.IrDAClient.EndConnect(System.IAsyncResult)">
            <summary>
            Asynchronously accepts an incoming connection attempt.
            </summary>
            <param name="asyncResult">An <see cref="T:System.IAsyncResult"/> object returned
            by a call to <see cref="M:InTheHand.Net.Sockets.IrDAClient.BeginConnect(InTheHand.Net.IrDAEndPoint,System.AsyncCallback,System.Object)"/>
            / <see cref="M:InTheHand.Net.Sockets.IrDAClient.BeginConnect(System.String,System.AsyncCallback,System.Object)"/>.
            </param>
        </member>
        <member name="M:InTheHand.Net.Sockets.IrDAClient.Close">
            <summary>
            Closes the <see cref="T:InTheHand.Net.Sockets.IrDAClient"/> and the underlying connection.
            </summary>
            -
            <remarks>The two XxxxxClient classes produced by Microsoft (TcpClient, 
            and IrDAClient in the NETCF) have various documented behaviours and various
            actual behaviours for close/dispose/finalize on the various platforms. :-(
            The current TcpClient implementation is that 
            Close/Dispose closes the connection by closing the underlying socket and/or
            NetworkStream, and finalization doesn't close either.  This is the behaviour
            we use for the here (for <see cref="T:InTheHand.Net.Sockets.BluetoothClient"/>,
            <see cref="T:InTheHand.Net.Sockets.IrDAClient"/>).  (The documentation in MSDN for 
            <see cref="T:System.Net.Sockets.TcpClient"/> is still wrong by-the-way,
            see <see href="https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=158480">
            Microsoft feedback #158480</see>).
            </remarks>
        </member>
        <member name="M:InTheHand.Net.Sockets.IrDAClient.GetStream">
            <summary>
            Returns the <see cref="T:System.Net.Sockets.NetworkStream"/> used to send and receive data.
            </summary>
            -
            <returns>The underlying <c>NetworkStream</c>.</returns>
            -
            <remarks>
            <para>
            <c>GetStream</c> returns a <c>NetworkStream</c> 
            that you can use to send and receive data. The <c>NetworkStream</c> class 
            inherits from the <see cref="T:System.IO.Stream"/> class, which provides a 
            rich collection of methods and properties used to facilitate network communications.
            </para>
            <para>You must call the <see cref="M:InTheHand.Net.Sockets.IrDAClient.Connect(InTheHand.Net.IrDAEndPoint)"/> 
            method, or one of its overloads, first, or 
            the <c>GetStream</c> method will throw an <c>InvalidOperationException</c>.
            After you have obtained the <c>NetworkStream</c>, call the 
            <see cref="M:System.Net.Sockets.NetworkStream.Write(System.Byte[],System.Int32,System.Int32)"/>
            method to send data to the remote host.
            Call the <see cref="M:System.Net.Sockets.NetworkStream.Read(System.Byte[],System.Int32,System.Int32)"/> 
            method to receive data arriving from the remote host.
            Both of these methods block until the specified operation is performed.
            You can avoid blocking on a read operation by checking the 
            <see cref="P:System.Net.Sockets.NetworkStream.DataAvailable"/> property.
            A <c>true</c> value means that data has arrived from the remote host and
            is available for reading. In this case, <c>Read</c> is 
            guaranteed to complete immediately.
            If the remote host has shutdown its connection, <c>Read</c> will 
            immediately return with zero bytes.
            </para>
            <note>
            Closing the <c>NetworkStream</c> closes the connection.  
            Similarly Closing, Disposing, or the finalization of the <c>IrDAClient</c> 
            Disposes the <c>NetworkStream</c>.
            This is new behaviour post 2.0.60828.0.
            <!-- [dodgy?]TcpClient documentation:
            You must close the NetworkStream when you are through sending and
            receiving data. Closing TcpClient does not release the NetworkStream.-->
            </note>
            <note>
            If you receive a SocketException, use SocketException.ErrorCode to obtain
            the specific error code. After you have obtained this code, you can refer
            to the Windows Sockets version 2 API error code documentation in MSDN
            for a detailed description of the error.
            </note>
            </remarks>
            -
            <exception cref="T:System.InvalidOperationException">
            The <see cref="T:InTheHand.Net.Sockets.IrDAClient"/> is not connected to a remote host.
            </exception>
            <exception cref="T:System.ObjectDisposedException">
            The <c>IrDAClient</c> has been closed.
            </exception>
        </member>
        <member name="M:InTheHand.Net.Sockets.IrDAClient.Dispose(System.Boolean)">
            <summary>
            Releases the unmanaged resources used by the <see cref="T:InTheHand.Net.Sockets.IrDAClient"/> and optionally releases the managed resources.
            </summary>
            <param name="disposing">true to release both managed and unmanaged resources; false to release only unmanaged resources.</param>
        </member>
        <member name="M:InTheHand.Net.Sockets.IrDAClient.Dispose">
            <summary>
            Closes the <see cref="T:InTheHand.Net.Sockets.IrDAClient"/> and the underlying connection.
            </summary>
            -
            <seealso cref="M:InTheHand.Net.Sockets.IrDAClient.Close"/>
        </member>
        <member name="P:InTheHand.Net.Sockets.IrDAClient.Active">
            <summary>
            Gets or set a value that indicates whether a connection has been made. 
            </summary>
        </member>
        <member name="P:InTheHand.Net.Sockets.IrDAClient.Available">
            <summary>
            The number of bytes of data received from the network and available to be read.
            </summary>
        </member>
        <member name="P:InTheHand.Net.Sockets.IrDAClient.Client">
            <summary>
            Gets or sets the underlying <see cref="T:System.Net.Sockets.Socket"/>.
            </summary>
            <remarks>
            This is particularly useful as it allows setting socket 
            options, for instance IrCOMM Cooked mode, ie
            <see cref="F:InTheHand.Net.Sockets.IrDASocketOptionName.NineWireMode"/>.
            </remarks>
            <example>Example code to connect to a IrCOMM service would be as 
            follows, note the use of the Client property.
            <code lang="VB.NET">
            Public Shared Sub Main()
               Dim cli As New IrDAClient
               ' Set IrCOMM Cooked/9-wire mode.
               cli.Client.SetSocketOption( _
                 IrDASocketOptionLevel.IrLmp, _
                 IrDASocketOptionName.NineWireMode, _
                 1)  ' representing true
               ' Connect
               cli.Connect("IrDA:IrCOMM")
               ' Connected, now send and receive e.g. by using the 
               ' NetworkStream returned by cli.GetStream
               ...
            End Sub
            </code>
            </example>
        </member>
        <member name="P:InTheHand.Net.Sockets.IrDAClient.Connected">
            <summary>
            Gets a value indicating whether the underlying <see cref="T:System.Net.Sockets.Socket"/> for an <see cref="T:InTheHand.Net.Sockets.IrDAClient"/> is connected to a remote host.
            </summary>
        </member>
        <member name="P:InTheHand.Net.Sockets.IrDAClient.RemoteMachineName">
            <summary>
            Gets the name of the peer device participating in the communication.
            </summary>
            -
            <remarks>
            This finds the name of the device to which the client is connection, 
            an exception will occur if the socket is not connected.
            </remarks>
            -
            <exception cref="T:System.ArgumentOutOfRangeException">
            If the remote device is not found in the discovery cache.
            </exception>
            <exception cref="T:System.InvalidOperationException">
            The socket is not connected.
            </exception>
        </member>
        <member name="T:InTheHand.Net.IrDA.IrDAService">
            <summary>
            Standard IrDA service names.
            </summary>
        </member>
        <member name="F:InTheHand.Net.IrDA.IrDAService.IrComm">
            <summary>
            Well-known Service Name &#x201C;IrDA:IrCOMM&#x201D;
            </summary>
        </member>
        <member name="F:InTheHand.Net.IrDA.IrDAService.IrLpt">
            <summary>
            Well-known Service Name &#x201C;IrLPT&#x201D;
            </summary>
        </member>
        <member name="F:InTheHand.Net.IrDA.IrDAService.ObjectExchange">
            <summary>
            Well-known Service Name &#x201C;OBEX&#x201D;
            </summary>
        </member>
        <member name="T:InTheHand.Net.Bluetooth.ServiceRecordCreator">
            <summary>
            Creates a Service Record byte array from the given 
            <see cref="T:InTheHand.Net.Bluetooth.ServiceRecord"/> object.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.ServiceRecordCreator.ErrorMsgSupportOnlyLength255">
            <exclude/>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.ServiceRecordCreator.CreateServiceRecord(InTheHand.Net.Bluetooth.ServiceRecord,System.Byte[])">
            <overloads>
            Creates a Service Record byte array from the given 
            <see cref="T:InTheHand.Net.Bluetooth.ServiceRecord"/> object.
            </overloads>
            -
            <summary>
            Creates a Service Record byte array from the given 
            <see cref="T:InTheHand.Net.Bluetooth.ServiceRecord"/> object,
            into the specified byte array.
            </summary>
            -
            <remarks>
            See the other overload <see cref="M:InTheHand.Net.Bluetooth.ServiceRecordCreator.CreateServiceRecord(InTheHand.Net.Bluetooth.ServiceRecord)"/>
            </remarks>
            -
            <param name="record">An instance of <see cref="T:InTheHand.Net.Bluetooth.ServiceRecord"/>
            containing the record to be created.
            </param>
            <param name="buffer">An array of <see cref="T:System.Byte"/> for the record
            to be written to.
            </param>
            -
            <exception cref="T:System.ArgumentOutOfRangeException">
            The record bytes are longer that the supplied byte array buffer.
            </exception>
            -
            <returns>The length of the record in the array of <see cref="T:System.Byte"/>.
            </returns>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.ServiceRecordCreator.WriteAttribute(InTheHand.Net.Bluetooth.ServiceAttribute,System.Byte[],System.Int32@)">
            <exclude/>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.ServiceRecordCreator.CreateServiceRecord(InTheHand.Net.Bluetooth.ServiceRecord)">
            <summary>
            Creates a Service Record byte array from the given 
            <see cref="T:InTheHand.Net.Bluetooth.ServiceRecord"/> object.
            </summary>
            -
            <remarks>
            <para>The only oddity (as with parsing) is with the <c>TextString</c>
            type.  The <see cref="T:InTheHand.Net.Bluetooth.ServiceElement"/> can
            either hold the string already encoded to its array of bytes or an 
            <see cref="T:System.String"/>.  In the latter case we will always simply 
            encode the string to an array of bytes using encoding 
            <see cref="P:System.Text.Encoding.UTF8"/>.
            </para>
            <para>Currently any UUIDs in the record are written out in the form supplied,
            we should probably write a &#x2018;short-form&#x2019; equivalent if its
            a &#x2018;Bluetooth-based&#x2019; UUID e.g. <c>Uuid128</c> as <c>Uuid16</c>.
            </para>
            </remarks>
            -
            <param name="record">An instance of <see cref="T:InTheHand.Net.Bluetooth.ServiceRecord"/>
            containing the record to be created.
            </param>
            -
            <returns>An array of <see cref="T:System.Byte"/> containing the resultant
            record bytes.  The length of the array is the length of the record bytes.
            </returns>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.ServiceRecordCreator.CreateAttrId(InTheHand.Net.Bluetooth.ServiceAttributeId,System.Byte[],System.Int32)">
            <exclude/>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.ServiceRecordCreator.CreateElement(InTheHand.Net.Bluetooth.ServiceElement,System.Byte[],System.Int32)">
            <summary>
            Create the element in the buffer starting at offset, and return its totalLength.
            </summary>
            <param name="element">The element to create.
            </param>
            <param name="buf">The byte array to write the encoded element to.
            </param>
            <param name="offset">The place to start writing in <paramref name="buf"/>.
            </param>
            
            <returns>The total length of the encoded element written to the buffer
            </returns>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.ServiceRecordCreator.WriteVariableLength(InTheHand.Net.Bluetooth.ServiceElement,System.Byte[],System.Byte[],System.Int32@,System.Int32@)">
            <exclude/>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.ServiceRecordCreator.WriteFixedLength(InTheHand.Net.Bluetooth.ServiceElement,System.Byte[],System.Byte[],System.Int32@,System.Int32@)">
            <exclude/>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.ServiceRecordCreator.MakeVariableLengthHeader(System.Byte[],System.Int32,InTheHand.Net.Bluetooth.ElementTypeDescriptor,InTheHand.Net.Bluetooth.ServiceRecordCreator.HeaderWriteState@)">
            <exclude/>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.ServiceRecordCreator.CompleteHeaderWrite(InTheHand.Net.Bluetooth.ServiceRecordCreator.HeaderWriteState,System.Byte[],System.Int32,System.Int32@)">
            <exclude/>
        </member>
        <member name="T:InTheHand.Net.Bluetooth.ServiceRecordCreator.HeaderWriteState">
            <exclude/>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.ServiceRecordCreator.HeaderWriteState.HeaderOffset">
            <exclude/>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.ServiceRecordCreator.HeaderWriteState.Etd">
            <exclude/>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.ServiceRecordCreator.HeaderWriteState.SizeIndex">
            <exclude/>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.ServiceRecordCreator.HeaderWriteState.HeaderLength">
            <exclude/>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.ServiceRecordCreator.HeaderWriteState.widcommNeedsStoring">
            <exclude/>
        </member>
        <member name="T:InTheHand.Net.Bluetooth.ServiceRecord">
            <summary>
            Holds an SDP service record.
            </summary>
            -
            <remarks>
            <para>A Service Record is the top-level container in the Service Discovery
            protocol/database.  It contains a list of Service Attributes each identified 
            by a numerical identifier (its <see cref="T:InTheHand.Net.Bluetooth.ServiceAttributeId"/>),
            and with its data held in a <see cref="T:InTheHand.Net.Bluetooth.ServiceElement"/>.
            <see cref="T:InTheHand.Net.Bluetooth.ServiceElement"/> has methods to access the
            various types of data it contains.
            </para>
            <para>The content of the record for a particular service class is defined in the
            profile&#x2019;s specification along with the IDs it uses. The IDs for the 
            common standard services have beed defined here, as e.g. 
            <see cref="T:InTheHand.Net.Bluetooth.AttributeIds.ObexAttributeId"/>,
            <see cref="T:InTheHand.Net.Bluetooth.AttributeIds.BasicPrintingProfileAttributeId"/>,
            etc. The Service Discovery profile itself defines IDs, some that can be used 
            in any record <see cref="T:InTheHand.Net.Bluetooth.AttributeIds.UniversalAttributeId"/>, 
            and others
            <see cref="T:InTheHand.Net.Bluetooth.AttributeIds.ServiceDiscoveryServerAttributeId"/>,
            and <see cref="T:InTheHand.Net.Bluetooth.AttributeIds.BrowseGroupDescriptorAttributeId"/>.
            </para>
            <para>Note that except for the attributes in the &#x201C;Universal&#x201D; category 
            the IDs are <i>not</i> unique, for instance the ID is 0x0200 for both 
            <see cref="F:InTheHand.Net.Bluetooth.AttributeIds.ServiceDiscoveryServerAttributeId.VersionNumberList"/>
            and <see cref="F:InTheHand.Net.Bluetooth.AttributeIds.BrowseGroupDescriptorAttributeId.GroupId"/>
            from <see cref="T:InTheHand.Net.Bluetooth.AttributeIds.ServiceDiscoveryServerAttributeId"/>
            and <see cref="T:InTheHand.Net.Bluetooth.AttributeIds.BrowseGroupDescriptorAttributeId"/>
            respectively.
            </para>
            <para><see cref="T:InTheHand.Net.Bluetooth.ServiceRecord"/> provides the normal 
            collection-type methods properties e.g. 
            <see cref="P:InTheHand.Net.Bluetooth.ServiceRecord.Count"/>, 
            <see cref="M:InTheHand.Net.Bluetooth.ServiceRecord.Contains(InTheHand.Net.Bluetooth.ServiceAttributeId)"/>,
            <see cref="M:InTheHand.Net.Bluetooth.ServiceRecord.GetAttributeById(InTheHand.Net.Bluetooth.ServiceAttributeId)"/>,
            <see cref="P:InTheHand.Net.Bluetooth.ServiceRecord.Item(System.Int32)"/>
            and <see cref="M:InTheHand.Net.Bluetooth.ServiceRecord.GetEnumerator"/>.  So, to 
            access a particular attribute&#x2019;s content get the 
            <see cref="T:InTheHand.Net.Bluetooth.ServiceAttribute"/> using one of those methods 
            and then read the data from the <see cref="T:InTheHand.Net.Bluetooth.ServiceElement"/>. 
            See the example below.
            </para>
            
            <para>&#xA0;
            </para>
            
            <para>The SDP specification defines the content of <c>TextString</c> element
            type very loosely and they are thus very difficult to handle when reading 
            from a record.
            The encoding of the string content is
            not set in the specification, and thus implementors are free to use any 
            encoding they fancy, for instance ASCII, UTF-8, 
            UTF-16, Windows-1252, etc &#x2014; all of which have been seen in record 
            from real devices.  It would have been much more sensible to mandate UTF-8 
            as the other part of the Bluetooth protocol suite do e.g. the PIN is always
            stored as a UTF-8 encoded string.
            </para>
            <para>Not only that but some of the attributes defined in the SDP specification
            can be included in more than one &#x2018;natural language&#x2019; version,
            and the definition of the language and the string&#x2019;s encoding
            is not included in the element, but is 
            instead defined in a separate element and the ID of the string attribute
            modified.  Yikes!
            </para>
            <para>  This makes it near impossible to decode the bytes in
            a string element at parse time and create the string object then.  Therefore
            the parser creates an element containing the raw bytes from the string which
            hopefully the user will know how to decode, passing the required encoding 
            information to one of methods on the element i.e.
            <see cref="M:InTheHand.Net.Bluetooth.ServiceElement.GetValueAsString(InTheHand.Net.Bluetooth.LanguageBaseItem)"/>,
            which takes a multi-language-base item from the same record (see e.g.
            <see cref="M:InTheHand.Net.Bluetooth.ServiceRecord.GetPrimaryLanguageBaseItem"/>),
            <see cref="M:InTheHand.Net.Bluetooth.ServiceElement.GetValueAsString(System.Text.Encoding)"/>
            which takes a .NET <see cref="T:System.Text.Encoding"/> object,
            or <see cref="M:InTheHand.Net.Bluetooth.ServiceElement.GetValueAsStringUtf8"/>,
            or <see cref="M:InTheHand.Net.Bluetooth.ServiceRecord.GetMultiLanguageStringAttributeById(InTheHand.Net.Bluetooth.ServiceAttributeId,InTheHand.Net.Bluetooth.LanguageBaseItem)"/>
            on the record which again takes a multi-language-base item.
            </para>
            
            <para>&#xA0;
            </para>
            
            <para>A Service Record can be created from the source byte array by using the 
            <see cref="M:InTheHand.Net.Bluetooth.ServiceRecord.CreateServiceRecordFromBytes(System.Byte[])"/>
            method or the 
            <see cref="M:InTheHand.Net.Bluetooth.ServiceRecordParser.Parse(System.Byte[],System.Int32,System.Int32)"/>
            on <see cref="T:InTheHand.Net.Bluetooth.ServiceRecordParser"/>.  A record
            can also be created from a list of <see cref="T:InTheHand.Net.Bluetooth.ServiceAttribute"/>
            passed to the constructor 
            <see cref="M:InTheHand.Net.Bluetooth.ServiceRecord.#ctor(System.Collections.Generic.IList{InTheHand.Net.Bluetooth.ServiceAttribute})"/>.
            </para>
            
            <para>&#xA0;
            </para>
            
            <para>From the SDP specification:
            </para>
            <list type="bullet">
            <item><term>2.2 ServiceRecord </term><description>&#x201C;&#x2026;
            a list of service attributes.&#x201D;</description></item>
            <item><term>2.3 ServiceAttribute</term><description>&#x201C;&#x2026;
            two components: an attribute id and an attribute value.&#x201D;</description></item>
            <item><term>2.4 Attribute ID</term><description>&#x201C;&#x2026;
            a 16-bit unsigned integer&#x201D;,
            &#x201C;&#x2026;represented as a data element.&#x201D;</description></item>
            <item><term>2.5 Attribute Value</term><description>&#x201C;&#x2026;
            a variable length field whose meaning is determined by the attribute ID&#x2026;&#x201D;,
            &#x201C;&#x2026;represented by a data element.&#x201D;</description></item>
            <item><term>3.1 Data Element</term><description>&#x201C;&#x2026;
            a typed data representation.
            It consists of two fields: a header field and a data field.
            The header field, in turn, is composed of two parts: a type descriptor and a size descriptor.
            &#x201D;</description></item>
            <item><term>3.2 Data Element Type Descriptor </term><description>&#x201C;&#x2026;
            a 5-bit type descriptor.&#x201D;</description></item>
            <item><term>3.3 Data Element Size Descriptor </term><description>&#x201C;&#x2026;
            The data element size descriptor is represented as a
            3-bit size index followed by 0, 8, 16, or 32 bits.&#x201D;</description></item>
            </list>
            </remarks>
            -
            <example>
            <code lang="C#">
            ServiceRecord record = ...
            ServiceAttribute attr = record.GetAttributeById(UniversalAttributeId.ServiceRecordHandle);
            ServiceElement element = attr.Value;
            if(element.ElementType != ElementType.UInt32) {
              throw new FooException("Invalid record content for ServiceRecordHandle");
            }
            UInt32 handle = (UInt32)element.Value;
            </code>
            or
            <code lang="VB.NET">
            Dim bppRecord As ServiceRecord = ...
            Dim attr As ServiceAttribute = bppRecord.GetAttributeById(BasicPrintingProfileAttributeId.PrinterName)
            Dim element As ServiceElement = attr.Value;
            ' Spec say it is in UTF-8
            Dim printerName As String = element.GetValueAsStringUtf8()
            </code>
            </example>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.ServiceRecord.ErrorMsgNotSeq">
            <exclude/>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.ServiceRecord.ErrorMsgNoAttributeWithId">
            <exclude/>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.ServiceRecord.ErrorMsgListContainsNotAttribute">
            <exclude/>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.ServiceRecord.#ctor">
            <summary>
            Initializes a new instance of the 
            <see cref="T:InTheHand.Net.Bluetooth.ServiceRecord"/> class 
            containing no <see cref="T:InTheHand.Net.Bluetooth.ServiceAttribute"/>s.
            </summary>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.ServiceRecord.#ctor(System.Collections.Generic.IList{InTheHand.Net.Bluetooth.ServiceAttribute})">
            <overloads>
            Initializes a new instance of the 
            <see cref="T:InTheHand.Net.Bluetooth.ServiceRecord"/> class.
            </overloads>
            ----
            <summary>
            Initializes a new instance of the 
            <see cref="T:InTheHand.Net.Bluetooth.ServiceRecord"/> class 
            with the specified set of <see cref="T:InTheHand.Net.Bluetooth.ServiceAttribute"/>s.
            </summary>
            -
            <param name="attributesList">The list of <see cref="T:InTheHand.Net.Bluetooth.ServiceAttribute"/>
            to add to the record,
            as an <see cref="T:System.Collections.Generic.IList`1"/>
            of <see cref="T:InTheHand.Net.Bluetooth.ServiceAttribute"/>.
            </param>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.ServiceRecord.#ctor(InTheHand.Net.Bluetooth.ServiceAttribute[])">
            <summary>
            Initializes a new instance of the 
            <see cref="T:InTheHand.Net.Bluetooth.ServiceRecord"/> class 
            with the specified set of <see cref="T:InTheHand.Net.Bluetooth.ServiceAttribute"/>s.
            </summary>
            -
            <param name="attributesList">The list of <see cref="T:InTheHand.Net.Bluetooth.ServiceAttribute"/>
            to add to the record,
            as an array of <see cref="T:InTheHand.Net.Bluetooth.ServiceAttribute"/>.
            </param>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.ServiceRecord.CreateServiceRecordFromBytes(System.Byte[])">
            <summary>
            Create a <see cref="T:InTheHand.Net.Bluetooth.ServiceRecord"/> by parsing
            the given array of <see cref="T:System.Byte"/>.
            </summary>
            -
            <remarks>This uses the <see cref="T:InTheHand.Net.Bluetooth.ServiceRecordParser"/>
            with its default settings.
            See <see cref="M:InTheHand.Net.Bluetooth.ServiceRecordParser.Parse(System.Byte[],System.Int32,System.Int32)"/>
            for more information.  In particular for the errors that can result, two
            of which are listed here.
            </remarks>
            -
            <param name="recordBytes">A byte array containing the encoded Service Record.
            </param>
            -
            <returns>The new <see cref="T:InTheHand.Net.Bluetooth.ServiceRecord"/> parsed from the byte array.
            </returns>
            -
            <exception cref="T:System.Net.ProtocolViolationException">
            The record contains invalid content.
            </exception>
            <exception cref="T:System.NotImplementedException">
            The record contains an element type not supported by the parser.
            </exception>
            -
            <seealso cref="M:InTheHand.Net.Bluetooth.ServiceRecordParser.Parse(System.Byte[],System.Int32,System.Int32)"/>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.ServiceRecord.GetAttributeByIndex(System.Int32)">
            <summary>
            Gets the attribute at the specified index.
            </summary>
            -
            <param name="index">The zero-based index of the attribute to get.</param>
            -
            <returns>A <see cref="T:InTheHand.Net.Bluetooth.ServiceAttribute"/> holding 
            the attribute at the specified index.
            Is never <see langword="null"/>.
            </returns>
            -
            <exception cref="T:System.ArgumentOutOfRangeException">
            <para>index is less than 0.</para>
            <para>-or-</para>
            <para>index is equal to or greater than Count. </para>
            </exception>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.ServiceRecord.Contains(InTheHand.Net.Bluetooth.ServiceAttributeId)">
            <overloads>
            Determines whether a service attribute with the specified ID, 
            and optional natural language, is in the List.
            </overloads>
            -
            <summary>
            Determines whether a service attribute with the specified ID is in the List.
            </summary>
            -
            <param name="id">The id of the service attribute to locate, as a 
            <see cref="T:InTheHand.Net.Bluetooth.ServiceAttributeId"/>.</param>
            -
            <returns>true if item is found in the record; otherwise, false. </returns>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.ServiceRecord.GetAttributeById(InTheHand.Net.Bluetooth.ServiceAttributeId)">
            <overloads>
            Returns the attribute with the given ID.
            </overloads>
            -
            <summary>
            Returns the attribute with the given ID.
            </summary>
            -
            <param name="id">The Attribute Id as a <see cref="T:InTheHand.Net.Bluetooth.ServiceAttributeId"/>.</param>
            -
            <returns>A <see cref="T:InTheHand.Net.Bluetooth.ServiceAttribute"/> holding 
            the attribute with the specified ID.
            Is never <see langword="null"/>.
            </returns>
            -
            <exception cref="T:System.Collections.Generic.KeyNotFoundException">
            There is no attribute with the given Id in the record.
            Throws <see cref="T:System.ArgumentException"/> in NETCFv1
            </exception>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.ServiceRecord.Contains(InTheHand.Net.Bluetooth.ServiceAttributeId,InTheHand.Net.Bluetooth.LanguageBaseItem)">
            <summary>
            Determines whether a TextString service attribute with the specified ID 
            and natural language 
            is in the List.
            </summary>
            -
            <param name="id">The id of the service attribute to locate, as a 
            <see cref="T:InTheHand.Net.Bluetooth.ServiceAttributeId"/>.</param>
            <param name="language">
            Which multi-language version of the string attribute to locate.
            </param>
            -
            <returns>true if item is found in the record; otherwise, false. </returns>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.ServiceRecord.GetAttributeById(InTheHand.Net.Bluetooth.ServiceAttributeId,InTheHand.Net.Bluetooth.LanguageBaseItem)">
            <summary>
            Returns the attribute with the given ID and natural language.
            </summary>
            -
            <param name="id">The id of the service attribute to locate, as a 
            <see cref="T:InTheHand.Net.Bluetooth.ServiceAttributeId"/>.</param>
            <param name="language">
            Which multi-language version of the string attribute to locate.
            </param>
            -
            <returns>A <see cref="T:InTheHand.Net.Bluetooth.ServiceAttribute"/> holding 
            the attribute with the specified ID and language.
            Is never <see langword="null"/>.
            </returns>
            -
            <exception cref="T:System.Collections.Generic.KeyNotFoundException">
            There is no attribute with the given Id with the given language base in the record.
            </exception>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.ServiceRecord.CreateLanguageBasedAttributeId(InTheHand.Net.Bluetooth.ServiceAttributeId,InTheHand.Net.Bluetooth.ServiceAttributeId)">
            <summary>
            Create the attribute id resulting for adding the language base attribute id.
            </summary>
            -
            <returns>The result <see cref="T:InTheHand.Net.Bluetooth.ServiceAttributeId"/>.</returns>
            -
            <exception cref="T:System.OverflowException">
            <paramref name="baseId"/> added to the <paramref name="id"/>
            would create an id that cannot be represented as an Attribute Id.
            </exception>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.ServiceRecord.GetMultiLanguageStringAttributeById(InTheHand.Net.Bluetooth.ServiceAttributeId,InTheHand.Net.Bluetooth.LanguageBaseItem)">
            <summary>
            Gets a <see cref="T:System.String"/> containing the value of the 
            <see cref="F:InTheHand.Net.Bluetooth.ElementTypeDescriptor.TextString"/>
            service attribute with the specified ID,
            using the specified natural language.
            </summary>
            -
            <remarks>
            <para>As noted in the documentation on this class, string are defined in 
            an odd manner, and the multi-language strings defined in the base SDP 
            specification are defined in a very very odd manner.  The natural language and the 
            string&#x2019;s encoding are not included in the element, but instead are 
            defined in a separate element, and the ID of the string attribute is 
            modified.  This pair is present for each natural language.
            </para>
            <para>This method is provided to simplify accessing those strings, given 
            the Language attribute it should use it to find and decode the string.
            If the primary Language attribute is to be used, then use the 
            <see cref="M:InTheHand.Net.Bluetooth.ServiceRecord.GetPrimaryMultiLanguageStringAttributeById(InTheHand.Net.Bluetooth.ServiceAttributeId)"/> 
            method that takes only the id parameter.
            </para>
            </remarks>
            -
            <param name="id">The id of the service attribute to locate, as a 
            <see cref="T:InTheHand.Net.Bluetooth.ServiceAttributeId"/>.</param>
            <param name="language">
            Which multi-language version of the string attribute to locate.
            </param>
            -
            <exception cref="T:System.Collections.Generic.KeyNotFoundException">
            There is no attribute with the given Id in the record.
            Throws <see cref="T:System.ArgumentException"/> in NETCFv1
            </exception>
            <exception cref="T:System.InvalidOperationException">
            The service element is not of type 
            <see cref="F:InTheHand.Net.Bluetooth.ElementTypeDescriptor.TextString"/>.
            </exception>
            <exception cref="T:System.Text.DecoderFallbackException">
            If the value in the service element is not a valid string in the encoding 
            specified in the given <see cref="T:InTheHand.Net.Bluetooth.LanguageBaseItem"/>.
            </exception>
            -
            <example>
            C#:
            <code lang="C#">
            LanguageBaseItem primaryLang = record.GetPrimaryLanguageBaseItem();
            if (primaryLang == null) {
              Console.WriteLine("Primary multi-language not present, would have to guess the string's encoding.");
              return;
            }
            try {
              String sn = record.GetMultiLanguageStringAttributeById(UniversalAttributeId.ServiceName, primaryLang);
              Console.WriteLine("ServiceName: " + sn);
            } catch (KeyNotFoundException) {
              Console.WriteLine("The record has no ServiceName Attribute.");
            }
            </code>
            </example>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.ServiceRecord.GetPrimaryMultiLanguageStringAttributeById(InTheHand.Net.Bluetooth.ServiceAttributeId)">
            <summary>
            Gets a <see cref="T:System.String"/> containing the value of the 
            <see cref="F:InTheHand.Net.Bluetooth.ElementTypeDescriptor.TextString"/>
            service attribute with the specified ID,
            using the primary natural language.
            </summary>
            -
            <remarks>
            <para>As noted in the documentation on this class, string are defined in 
            an odd manner, and the multi-language strings defined in the base SDP 
            specification are defined in a very very odd manner.  The natural language and the 
            string&#x2019;s encoding are not included in the element, but instead are 
            defined in a separate element, and the ID of the string attribute is 
            modified.  This pair is present for each natural language.
            </para>
            <para>This method is provided to simplify accessing those strings, it will 
            find the primary Language attribute and use it to find and decode the string.
            And if there is no primary Language attribute, which is the case in many 
            of the records one sees on mobile phones, it will attempt the operation 
            assuming the string is encoded in UTF-8 (or ASCII).
            </para>
            </remarks>
            -
            <param name="id">The id of the service attribute to locate, as a 
            <see cref="T:InTheHand.Net.Bluetooth.ServiceAttributeId"/>.</param>
            -
            <exception cref="T:System.Collections.Generic.KeyNotFoundException">
            There is no attribute with the given Id in the record.
            Throws <see cref="T:System.ArgumentException"/> in NETCFv1
            </exception>
            <exception cref="T:System.InvalidOperationException">
            The service element is not of type 
            <see cref="F:InTheHand.Net.Bluetooth.ElementTypeDescriptor.TextString"/>.
            </exception>
            <exception cref="T:System.Text.DecoderFallbackException">
            If the value in the service element is not a valid string in the encoding 
            specified in the given <see cref="T:InTheHand.Net.Bluetooth.LanguageBaseItem"/>.
            </exception>
            -
            <example>
            C#:
            <code lang="C#">
            try {
              String sn = record.GetMultiLanguageStringAttributeById(UniversalAttributeId.ServiceName);
              Console.WriteLine("ServiceName: " + sn);
            } catch (KeyNotFoundException) {
              Console.WriteLine("The record has no ServiceName Attribute.");
            }
            </code>
            </example>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.ServiceRecord.GetLanguageBaseList">
            <summary>
            Gets the list of LanguageBaseAttributeId items in the service record.
            </summary>
            -
            <remarks>
            See also <see cref="M:InTheHand.Net.Bluetooth.ServiceRecord.GetPrimaryLanguageBaseItem"/>.
            </remarks>
            -
            <returns>
            An array of <see cref="T:InTheHand.Net.Bluetooth.LanguageBaseItem"/>.
            An array of length zero is returned if the service record contains no such attribute.
            </returns>
            -
            <seealso cref="M:InTheHand.Net.Bluetooth.ServiceRecord.GetPrimaryLanguageBaseItem"/>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.ServiceRecord.GetPrimaryLanguageBaseItem">
            <summary>
            Gets the primary LanguageBaseAttributeId item in the service record.
            </summary>
            -
            <remarks>
            For instance, can be used with methods 
            <see cref="M:InTheHand.Net.Bluetooth.ServiceRecord.GetMultiLanguageStringAttributeById(InTheHand.Net.Bluetooth.ServiceAttributeId,InTheHand.Net.Bluetooth.LanguageBaseItem)"/>,
            and <see cref="M:InTheHand.Net.Bluetooth.ServiceRecord.GetAttributeById(InTheHand.Net.Bluetooth.ServiceAttributeId,InTheHand.Net.Bluetooth.LanguageBaseItem)"/>
            etc.  See example code in the first.
            </remarks>
            -
            <returns>
            A <see cref="T:InTheHand.Net.Bluetooth.LanguageBaseItem"/>, or null
            if the service record contains no such attribute, or 
            no primary language item (one with Base Id 0x0100) is included.
            </returns>
            -
            <seealso cref="M:InTheHand.Net.Bluetooth.ServiceRecord.GetLanguageBaseList"/>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.ServiceRecord.GetEnumerator">
            <summary>
            Gets an enumerator that can be used to navigate through the record's 
            list of <see cref="T:InTheHand.Net.Bluetooth.ServiceAttribute"/>s.
            </summary>
            -
            <returns>An <see cref="T:System.Collections.Generic.IEnumerator`1"/>
            of type <see cref="T:InTheHand.Net.Bluetooth.ServiceAttribute"/>.
            </returns>
            -
            <example>
            In C#:
            <code lang="C#">
            foreach (ServiceAttribute curAttr in record) {
               if (curAttr.Id == UniversalAttributeId.ProtocolDescriptorList) {
               ...
            }
            </code>
            In Visual Basic:
            <code lang="VB.NET">
            For Each curAttr As ServiceAttribute In record
               If curAttr.Id = UniversalAttributeId.ProtocolDescriptorList Then
               ...
            Next
            </code>
            </example>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.ServiceRecord.System#Collections#IEnumerable#GetEnumerator">
            <summary>
            Gets an enumerator that can be used to navigate through the record's 
            list of <see cref="T:InTheHand.Net.Bluetooth.ServiceAttribute"/>s.
            </summary>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.ServiceRecord.ToByteArray">
            <summary>
            Return the byte array representing the service record.
            </summary>
            -
            <remarks>The byte array content is created dynamically from the
            <see cref="T:InTheHand.Net.Bluetooth.ServiceRecord"/> instance using
            the <see cref="T:InTheHand.Net.Bluetooth.ServiceRecordCreator"/> class.
            </remarks>
            -
            <returns>The result as an array of <see cref="T:System.Byte"/>.
            </returns>
            -
            <seealso cref="P:InTheHand.Net.Bluetooth.ServiceRecord.SourceBytes"/>
        </member>
        <member name="P:InTheHand.Net.Bluetooth.ServiceRecord.Count">
            <summary>
            Gets the count of attributes in the record.
            </summary>
        </member>
        <member name="P:InTheHand.Net.Bluetooth.ServiceRecord.Item(System.Int32)">
            <summary>
            Gets the attribute at the specified index.
            </summary>
            -
            <param name="index">The zero-based index of the attribute to get.</param>
            -
            <returns>A <see cref="T:InTheHand.Net.Bluetooth.ServiceAttribute"/> holding 
            the attribute at the specified index.</returns>
            -
            <exception cref="T:System.Exception">
            <para>index is less than 0.</para>
            <para>-or-</para>
            <para>index is equal to or greater than Count. </para>
            </exception>
        </member>
        <member name="P:InTheHand.Net.Bluetooth.ServiceRecord.AttributeIds">
            <summary>
            Get a list of the numerical IDs of the Attributes in the record 
            as an <see cref="T:System.Collections.Generic.IList`1"/>
            of <see cref="T:InTheHand.Net.Bluetooth.ServiceAttributeId"/>.
            </summary>
            -
            <remarks>
            This method will likely be only rarely used: instead 
            one would generally want either to read a specific attribute using 
            <see cref="M:InTheHand.Net.Bluetooth.ServiceRecord.GetAttributeById(InTheHand.Net.Bluetooth.ServiceAttributeId)"/>,
            or read every attribute by using 
            <see cref="T:InTheHand.Net.Bluetooth.ServiceRecord"/>'s
            <c>IEnumerable</c> ability e.g.
            <code lang="VB.NET">
               For Each curAttr As ServiceAttribute In record
                  If curAttr.Id = UniversalAttributeId.ProtocolDescriptorList Then
                  ...
               Next
            </code>
            <para>Note, for NETCFv1 this returns an instance of the non-Generic list 
            <see cref="T:System.Collections.IList"/>.
            </para>
            </remarks>
            -
            (Provide a pure example since NDocs makes big mess of displaying Generic types).
            <example>
            In C#:
            <code lang="C#">
              IList&lt;ServiceAttributeId&gt; ids = record.GetAttributeIds();
            </code>
            In VB.NET:
            <code lang="VB.NET">
              Dim ids As IList(Of ServiceAttributeId) = record.GetAttributeIds()
            </code>
            Or without Generics in .NET 1.1 (NETCFv1) in VB.NET:
            <code lang="VB.NET">
              Dim ids As IList = record.GetAttributeIds()
            </code>
            </example>
        </member>
        <member name="P:InTheHand.Net.Bluetooth.ServiceRecord.SourceBytes">
            <summary>
            Get the raw byte array from which the record was parsed.
            </summary>
            -
            <remarks>
            <para>A <see cref="T:InTheHand.Net.Bluetooth.ServiceRecord"/> can be created either by manually building new 
            <see cref="T:InTheHand.Net.Bluetooth.ServiceAttribute"/>s holding new 
            <see cref="T:InTheHand.Net.Bluetooth.ServiceElement"/>s, or it can be created
            by <see cref="T:InTheHand.Net.Bluetooth.ServiceRecordParser"/> parsing an array
            of bytes read from another machine by e.g. 
            <see cref="M:InTheHand.Net.Sockets.BluetoothDeviceInfo.GetServiceRecords(System.Guid)"/>.
            In that case this method returns that source byte array.
            </para>
            <para>To creates a Service Record byte array from the contained
            <see cref="T:InTheHand.Net.Bluetooth.ServiceAttribute"/>s use
            <see cref="M:InTheHand.Net.Bluetooth.ServiceRecord.ToByteArray"/> or <see cref="T:InTheHand.Net.Bluetooth.ServiceRecordCreator"/>.
            </para>
            </remarks>
            -
            <value>
            An array of <see cref="T:System.Byte"/>, or <see langword="null"/> if
            the record was not created by parsing a raw record.
            </value>
            -
            <seealso cref="M:InTheHand.Net.Bluetooth.ServiceRecord.ToByteArray"/>
        </member>
        <member name="T:InTheHand.Net.Bluetooth.BluetoothWin32Authentication">
             <summary>
             Provides Bluetooth authentication services on desktop Windows.
             </summary>
             -
             <remarks>
             <note>This class is supported on desktop Windows and with the Microsoft
             stack only.
             </note>
             <para>This class can be used in one of two ways.  Firstly
             an instance can be created specifying one device that is being connected
             to and the PIN string to use for it.  (That form is used internally by
             <see cref="T:InTheHand.Net.Sockets.BluetoothClient"/> to support
             its <see cref="M:InTheHand.Net.Sockets.BluetoothClient.SetPin(System.String)"/> method).
             </para>
             <para>Secondly it can also be used a mode where a user supplied
             callback will be called when any device requires authentication,
             the callback includes a parameter of type 
             <see cref="T:InTheHand.Net.Bluetooth.BluetoothWin32AuthenticationEventArgs"/>.
             Various authentication methods are available in Bluetooth version
             2.1 and later.  Which one is being used is indicated by the
             <see cref="P:InTheHand.Net.Bluetooth.BluetoothWin32AuthenticationEventArgs.AuthenticationMethod"/>
             property.
             If it is <see cref="F:InTheHand.Net.Bluetooth.BluetoothAuthenticationMethod.Legacy"/>
             then the callback method should set the
             <see cref="P:InTheHand.Net.Bluetooth.BluetoothWin32AuthenticationEventArgs.Pin"/>
             property.
             </para>
             <para>
             For the other authentication methods 
             e.g. <see cref="F:InTheHand.Net.Bluetooth.BluetoothAuthenticationMethod.NumericComparison"/>
             or <see cref="F:InTheHand.Net.Bluetooth.BluetoothAuthenticationMethod.OutOfBand"/>
             the callback method should use one or more of the other properties and
             methods e.g.
             <see cref="P:InTheHand.Net.Bluetooth.BluetoothWin32AuthenticationEventArgs.NumberOrPasskey"/>,
             <see cref="P:InTheHand.Net.Bluetooth.BluetoothWin32AuthenticationEventArgs.Confirm"/>,
             <see cref="P:InTheHand.Net.Bluetooth.BluetoothWin32AuthenticationEventArgs.ResponseNumberOrPasskey"/>,
             <see cref="M:InTheHand.Net.Bluetooth.BluetoothWin32AuthenticationEventArgs.ConfirmOob(System.Byte[],System.Byte[])"/>
             etc.
             </para>
             <para>
             See the example below for a 'Legacy' method handler.
             The callback mode can be configured to do a callback after the 
             &#x2018;send PIN&#x2019; action, this allows one to see if it was successful 
             etc.  An example sequence where the PIN was <strong>incorrect</strong> is as follows.
             </para>
             <code lang="none">
            Authenticate one device -- with wrong passcode here the first two times.
            Passcode respectively: 'BAD-x', 'BAD-y', '9876'
            Making PC discoverable
            Hit Return to complete
            Authenticating 0017E464CF1E wm_alan1
              Attempt# 0, Last error code 0
              Sending "BAD-x"
            Authenticating 0017E464CF1E wm_alan1
              Attempt# 1, Last error code 1244
              Sending "BAD-y"
            Authenticating 0017E464CF1E wm_alan1
              Attempt# 2, Last error code 1167
              Sending "9876"
            Authenticating 0017E464CF1E wm_alan1
              Attempt# 3, Last error code 1167
            etc
            </code>
             <para>
             That is we see the error code of <c>1244=NativeErrorNotAuthenticated</c>
             once, and then the peer device disappears (<c>1167=NativeErrorDeviceNotConnected</c>).
             I suppose that's a security feature -- its stops an attacker
             from trying again and again with different passcodes.
            
             Anyway the result of that is that is it <strong>not</strong> worth repeating 
             the callback after the device disappears.  The code now enforces this.  With 
             <see cref="P:InTheHand.Net.Bluetooth.BluetoothWin32AuthenticationEventArgs.CallbackWithResult"/> 
             set to <c>true</c>, if the result of the previous attempt was &#x2018;success&#x2019; 
             or &#x2018;device not connected&#x2019; then any new PIN set in the callback 
             won&#x2019;t be used and thus the callback won&#x2019;t be called again 
             for that authentication attempt.
             </para>
             <para>A successful authentication process can thus be detected by checking if
             <code>e.PreviousNativeErrorCode == NativeErrorSuccess &amp;&amp; e.AttemptNumber != 0</code>
             </para>
             <para>
             </para>
             <para>The instance will continue receiving authentication requests
             until it is disposed or garbage collected, so keep a reference to it
             whilst it should be active and call 
             <see cref="M:InTheHand.Net.Bluetooth.BluetoothWin32Authentication.Dispose"/>
             when you&#x2019;re finished.
             </para>
             </remarks>
             -
             <example>
             If one wants to respond to PIN requests for one device with a known PIN then
             use the simple form which is initialized with an address and PIN.
             <code lang="C#">
             BluetoothWin32Authentication authenticator
                 = new BluetoothWin32Authentication(remoteEP.Address, m_pin);
             // when the peer is expected to require pairing, perhaps do some work.
             authenticator.Dispose();
             </code>
             
             If one wants to see the PIN request, perhaps to be able to check the type
             of the peer by its address then use the form here which requests callbacks.
             (Note that this code assumes that 'Legacy' PIN-based pairing is being
             used; setting the Pin property will presumably have no effect if the
             authentication method being used is one of the v2.1 SSP forms).
             <code lang="VB.NET">
             Using pairer As New BluetoothWin32Authentication(AddressOf Win32AuthCallbackHandler)
                 Console.WriteLine("Hit Return to stop authenticating")
                 Console.ReadLine()
             End Using
             ...
             
             Sub Win32AuthCallbackHandler(ByVal sender As Object, ByVal e As InTheHand.Net.Bluetooth.BluetoothWin32AuthenticationEventArgs)
                ' Note we assume here that 'Legacy' pairing is being used,
                ' and thus we only set the Pin property!
                Dim address As String = e.Device.DeviceAddress.ToString()
                Console.WriteLine("Received an authentication request from address " + address)
                
                ' compare the first 8 hex numbers, this is just a special case because in the
                ' used scenario the model of the devices can be identified by the first 8 hex
                ' numbers, the last 4 numbers being the device specific part.
                If address.Substring(0, 8).Equals("0099880D") OrElse _
                        address.Substring(0, 8).Equals("0099880E") Then
                    ' send authentication response
                    e.Pin = "5276"
                ElseIf (address.Substring(0, 8).Equals("00997788")) Then
                    ' send authentication response
                    e.Pin = "ásdfghjkl"
                End If
             End Sub
             </code>
             </example>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothWin32Authentication.NativeErrorSuccess">
            <summary>
            Windows&#x2019; ERROR_SUCCESS
            </summary>
            <remarks><see cref="P:InTheHand.Net.Bluetooth.BluetoothWin32AuthenticationEventArgs.PreviousNativeErrorCode"/>
            </remarks>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothWin32Authentication.NativeErrorNotAuthenticated">
            <summary>
            Windows&#x2019; ERROR_NOT_AUTHENTICATED
            </summary>
            <remarks><see cref="P:InTheHand.Net.Bluetooth.BluetoothWin32AuthenticationEventArgs.PreviousNativeErrorCode"/>
            </remarks>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothWin32Authentication.NativeErrorDeviceNotConnected">
            <summary>
            Windows&#x2019; ERROR_DEVICE_NOT_CONNECTED
            </summary>
            <remarks><see cref="P:InTheHand.Net.Bluetooth.BluetoothWin32AuthenticationEventArgs.PreviousNativeErrorCode"/>
            </remarks>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.BluetoothWin32Authentication.#ctor(InTheHand.Net.BluetoothAddress,System.String)">
            <overloads>
            Initializes a new instance of the <see cref="T:InTheHand.Net.Bluetooth.BluetoothWin32Authentication"/> class.
            </overloads>
            -
            <summary>
            Initializes a new instance of the <see cref="T:InTheHand.Net.Bluetooth.BluetoothWin32Authentication"/> class,
            to respond to a specific address with a specific PIN string.
            </summary>
            -
            <remarks>
            <para>The instance will continue receiving authentication requests
            until it is disposed or garbage collected, so keep a reference to it
            whilst it should be active, and call 
            <see cref="M:InTheHand.Net.Bluetooth.BluetoothWin32Authentication.Dispose"/>
            when you&#x2019;re finished.
            </para>
            </remarks>
            -
            <param name="remoteAddress">The address of the device to authenticate,
            as a <see cref="T:InTheHand.Net.BluetoothAddress"/>.
            </param>
            <param name="pin">The PIN string to use for authentication, as a
            <see cref="T:System.String"/>.
            </param>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.BluetoothWin32Authentication.#ctor(System.EventHandler{InTheHand.Net.Bluetooth.BluetoothWin32AuthenticationEventArgs})">
             <summary>
             Initializes a new instance of the <see cref="T:InTheHand.Net.Bluetooth.BluetoothWin32Authentication"/> class,
             to call a specified handler when any device requires authentication.
             </summary>
             -
             <remarks>
             <para>See the example below.
             </para>
             <para>The callback mode can be configured to do a callback after the 
             &#x2018;send PIN&#x2019;action, this allows one to see if it was successful 
             etc.  An example sequence where the PIN was <strong>incorrect</strong> is as follows.
             </para>
             <code lang="none">
            Authenticate one device -- with wrong passcode here the first two times.
            Passcode respectively: 'BAD-x', 'BAD-y', '9876'
            Making PC discoverable
            Hit Return to complete
            Authenticating 0017E464CF1E wm_alan1
              Attempt# 0, Last error code 0
              Sending "BAD-x"
            Authenticating 0017E464CF1E wm_alan1
              Attempt# 1, Last error code 1244
              Sending "BAD-y"
            Authenticating 0017E464CF1E wm_alan1
              Attempt# 2, Last error code 1167
              Sending "9876"
            Authenticating 0017E464CF1E wm_alan1
              Attempt# 3, Last error code 1167
            etc
            </code>
             <para>
             That is we see the error code of <c>1244=NativeErrorNotAuthenticated</c>
             once, and then the peer device disappears (<c>1167=NativeErrorDeviceNotConnected</c>).
             I suppose that's a security feature -- its stops an attacker
             from trying again and again with different passcodes.
            
             Anyway the result of that is that is it <strong>not</strong> worth repeating 
             the callback after the device disappears.  The code now enforces this.  With 
             <see cref="P:InTheHand.Net.Bluetooth.BluetoothWin32AuthenticationEventArgs.CallbackWithResult"/> 
             set to <c>true</c>, if the result of the previous attempt was &#x2018;success&#x2019; 
             or &#x2018;device not connected&#x2019; then any new PIN set in the callback 
             won&#x2019;t be used and thus the callback won&#x2019;t be called again 
             for that authentication attempt.
             </para>
             <para>A successful authentication process can thus be detected by setting
             <c>CallbackWithResult=true</c> and checking in the callback if
             <code>  e.PreviousNativeErrorCode == NativeErrorSuccess &amp;&amp; e.AttemptNumber != 0</code>
             </para>
             <para>
             </para>
             <para>The instance will continue receiving authentication requests
             until it is disposed or garbage collected, so keep a reference to it
             whilst it should be active, and call 
             <see cref="M:InTheHand.Net.Bluetooth.BluetoothWin32Authentication.Dispose"/>
             when you&#x2019;re finished.
             </para>
             </remarks>
             -
             <param name="handler">A reference to a handler function that can respond
             to authentication requests.
             </param>
             -
             <example>
             <code lang="VB.NET">
             Using pairer As New BluetoothWin32Authentication(AddressOf Win32AuthCallbackHandler)
                 Console.WriteLine("Hit Return to stop authenticating")
                 Console.ReadLine()
             End Using
             ...
             
             Sub Win32AuthCallbackHandler(ByVal sender As Object, ByVal e As InTheHand.Net.Bluetooth.BluetoothWin32AuthenticationEventArgs)
                Dim address As String = e.Device.DeviceAddress.ToString()
                Console.WriteLine("Received an authentication request from address " + address)
                
                ' compare the first 8 hex numbers, this is just a special case because in the
                ' used scenario the model of the devices can be identified by the first 8 hex
                ' numbers, the last 4 numbers being the device specific part.
                If address.Substring(0, 8).Equals("0099880D") OrElse _
                        address.Substring(0, 8).Equals("0099880E") Then
                    ' send authentication response
                    e.Pin = "5276"
                ElseIf (address.Substring(0, 8).Equals("00997788")) Then
                    ' send authentication response
                    e.Pin = "ásdfghjkl"
                End If
             End Sub
             </code>
             </example>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.BluetoothWin32Authentication.OnAuthentication(InTheHand.Net.Bluetooth.BluetoothWin32AuthenticationEventArgs)">
            <summary>
            Calls the authentication callback handler.
            </summary>
            -
            <param name="e">An instance of <see cref="T:InTheHand.Net.Bluetooth.BluetoothWin32AuthenticationEventArgs"/> 
            containing the details of the authentication callback.
            </param>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.BluetoothWin32Authentication.Dispose">
            <summary>
            Release the unmanaged resources used by the <see cref="T:InTheHand.Net.Bluetooth.BluetoothWin32Authentication"/>.
            </summary>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.BluetoothWin32Authentication.Dispose(System.Boolean)">
            <summary>
            Release the unmanaged resources used by the <see cref="T:InTheHand.Net.Bluetooth.BluetoothWin32Authentication"/>,
            and optionally disposes of the managed resources.
            </summary>
        </member>
        <member name="T:InTheHand.Net.Bluetooth.Widcomm.WidcommSppClient.SPP_STATE_CODE">
            <summary>
            Define SPP connection states
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.Widcomm.WidcommSppClient.SPP_STATE_CODE.CONNECTED">
            <summary>
            port now connected
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.Widcomm.WidcommSppClient.SPP_STATE_CODE.DISCONNECTED">
            <summary>
            port now disconnected
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.Widcomm.WidcommSppClient.SPP_STATE_CODE.RFCOMM_CONNECTION_FAILED">
             <summary>
            rfcomm connction failed
             </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.Widcomm.WidcommSppClient.SPP_STATE_CODE.PORT_IN_USE">
            <summary>
            Port in use, for SPPClient only [for SPP Client only]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.Widcomm.WidcommSppClient.SPP_STATE_CODE.PORT_NOT_CONFIGURED">
            <summary>
            no port configured [for SPP Client only]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.Widcomm.WidcommSppClient.SPP_STATE_CODE.SERVICE_NOT_FOUND">
            <summary>
            service not found [for SPP Client only]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.Widcomm.WidcommSppClient.SPP_STATE_CODE.ALLOC_SCN_FAILED">
            <summary>
            [for SPP Server Only]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.Widcomm.WidcommSppClient.SPP_STATE_CODE.SDP_FULL">
            <summary>
            [for SPP Server Only]
            </summary>
        </member>
        <member name="T:InTheHand.Net.Bluetooth.Widcomm.WidcommSppClient.SPP_STATE_CODE__WCE">
            <summary>
            Define SPP connection states
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.Widcomm.WidcommSppClient.SPP_STATE_CODE__WCE.CONNECTED">
            <summary>
            port now connected
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.Widcomm.WidcommSppClient.SPP_STATE_CODE__WCE.DISCONNECTED">
            <summary>
            port now disconnected
            </summary>
        </member>
        <member name="T:InTheHand.Net.Bluetooth.Widcomm.WidcommSppClient.SPP_CLIENT_RETURN_CODE">
            <summary>
            Define return code for SPP Client functions
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.Widcomm.WidcommSppClient.SPP_CLIENT_RETURN_CODE.SUCCESS">
            <summary>
            Operation initiated without error
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.Widcomm.WidcommSppClient.SPP_CLIENT_RETURN_CODE.NO_BT_SERVER">
            <summary>
            COM server could not be started
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.Widcomm.WidcommSppClient.SPP_CLIENT_RETURN_CODE.ALREADY_CONNECTED">
            <summary>
            attempt to connect before previous connection closed
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.Widcomm.WidcommSppClient.SPP_CLIENT_RETURN_CODE.NOT_CONNECTED">
            <summary>
            attempt to close unopened connection
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.Widcomm.WidcommSppClient.SPP_CLIENT_RETURN_CODE.NOT_ENOUGH_MEMORY">
            <summary>
            local processor could not allocate memory for open
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.Widcomm.WidcommSppClient.SPP_CLIENT_RETURN_CODE.INVALID_PARAMETER__CE_UE">
            <summary>
            One or more of function parameters are not valid
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.Widcomm.WidcommSppClient.SPP_CLIENT_RETURN_CODE.UNKNOWN_ERROR__CE_IP">
            <summary>
            Any condition other than the above
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.Widcomm.WidcommSppClient.SPP_CLIENT_RETURN_CODE.NO_EMPTY_PORT">
            <summary>
            no empty port
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.Widcomm.WidcommSppClient.SPP_CLIENT_RETURN_CODE.LICENSE_ERROR">
            <summary>
            license error
            </summary>
        </member>
        <member name="T:InTheHand.Net.Bluetooth.Widcomm.WidcommSppClient.SPP_CLIENT_RETURN_CODE__WCE">
            <summary>
            Define return code for SPP Client functions
            </summary>
        </member>
        <member name="T:InTheHand.Net.Bluetooth.Factory.CommonRfcommStream">
            <exclude/>
            <summary>
            
            </summary>
            -
            <remarks>
            <para>Sub-class must call various methods at the following events:
            <list type="bullet">
            <item><term>open</term>
            <description><see cref="M:InTheHand.Net.Bluetooth.Factory.CommonRfcommStream.HandleCONNECTED(System.String)"/>
            or <see cref="M:InTheHand.Net.Bluetooth.Factory.CommonRfcommStream.HandleCONNECT_ERR(System.String,System.Nullable{System.Int32})"/> on failure</description>
            </item>
            <item><term>close</term>
            <description><see cref="M:InTheHand.Net.Bluetooth.Factory.CommonRfcommStream.HandleCONNECT_ERR(System.String,System.Nullable{System.Int32})"/></description>
            </item>
            <item><term>data arrival</term>
            <description><see cref="M:InTheHand.Net.Bluetooth.Factory.CommonRfcommStream.HandlePortReceive(System.Byte[])"/></description>
            </item>
            <item><term>flow control off</term>
            <description><see cref="M:InTheHand.Net.Bluetooth.Factory.CommonRfcommStream.FreePendingWrites"/></description>
            </item>
            </list>
            </para>
            </remarks>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.Factory.CommonRfcommStream.EnsureOpenForWrite">
            <summary>
            Fails if state is not Connected.
            </summary>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.Factory.CommonRfcommStream.EnsureOpenForRead">
            <summary>
            Fails if state is not Connected or PeerDidClose.
            </summary>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.Factory.CommonRfcommStream.RemovePortRecords">
            <summary>
            <see cref="M:InTheHand.Net.Bluetooth.Factory.CommonRfcommStream.DoPortClose(System.Boolean)"/>
            </summary>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.Factory.CommonRfcommStream.DoOtherPreDestroy(System.Boolean)">
            <summary>
            <see cref="M:InTheHand.Net.Bluetooth.Factory.CommonRfcommStream.DoPortClose(System.Boolean)"/>
            </summary>
            <param name="disposing">Disposing</param>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.Factory.CommonRfcommStream.DoPortClose(System.Boolean)">
            <summary>
            Called from CloseInternal and Dispose;
            RemovePortRecords is called before from both places.
            Dispose then calls DoOtherPreDestroy and DoPortDestroy in that order.
            </summary>
            <param name="disposing">Disposing</param>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.Factory.CommonRfcommStream.DoPortDestroy(System.Boolean)">
            <summary>
            <see cref="M:InTheHand.Net.Bluetooth.Factory.CommonRfcommStream.DoPortClose(System.Boolean)"/>
            </summary>
            <param name="disposing">Disposing</param>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.Factory.CommonRfcommStream.DoOtherSetup(InTheHand.Net.BluetoothEndPoint,System.Int32)">
            <summary>
            Called before DoOpenClient.
            For instance is empty on BTPS, on Widcomm it calls SetScnForPeerServer and SetSecurityLevelClient.
            </summary>
            <param name="bep">Endpoint</param>
            <param name="scn">Channel number</param>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.Factory.CommonRfcommStream.DoOpenClient(System.Int32,InTheHand.Net.BluetoothAddress)">
            <summary>
            Starts the connect process.  The async completion should call
            either <see cref="M:InTheHand.Net.Bluetooth.Factory.CommonRfcommStream.HandleCONNECTED(System.String)"/> or <see cref="M:InTheHand.Net.Bluetooth.Factory.CommonRfcommStream.HandleCONNECT_ERR(System.String,System.Nullable{System.Int32})"/>.
            </summary>
            <param name="scn">scn</param>
            <param name="addressToConnect">addr</param>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.Factory.CommonRfcommStream.HandleCONNECTED(System.String)">
            <summary>
            Call when connection is successfully made.
            </summary>
            <param name="eventId">Used for logging etc.  Pass a string
            containing the name of the stack's event/status that occurred.
            </param>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.Factory.CommonRfcommStream.DoIsConnected(InTheHand.Net.BluetoothAddress@)">
            <summary>
            Get the remote address.
            </summary>
            -
            <param name="p_remote_bdaddr">On return contains the address to which we are connected.
            </param>
            -
            <returns><see langword="true"/> if connected, but we ignore the result.
            </returns>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.Factory.CommonRfcommStream.HandleCONNECT_ERR(System.String,System.Nullable{System.Int32})">
            <summary>
            Call when connection is un-successfully made (fails),
            and also when the connection closes.
            </summary>
            <param name="eventId">Used for logging etc.  Pass a string
            containing the name of the stack's event/status that occurred.
            </param>
            <param name="socketErrorCode">The socket error code for this failure
            -- known.
            Pass for instance a value from <see cref="T:System.Net.Sockets.SocketError"/>
            as an <see cref="T:System.Int32"/>;
            or <see langword="null"/> respectively.
            </param>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.Factory.CommonRfcommStream.CloseInternal(InTheHand.Net.AsyncResult{System.Int32,InTheHand.Net.Bluetooth.Factory.CommonRfcommStream.BeginReadParameters}[]@,InTheHand.Net.AsyncNoResult{InTheHand.Net.Bluetooth.Factory.CommonRfcommStream.BeginReadParameters}[]@)">
            <summary>
            Used: 1. when we get CONNECT_ERR from the stack, and POSSIBLY 2. when we close the 
            stream to do consumer timeout (SO_RCVTIMEO/etc).
            </summary>
            <param name="allRead">Out: to call <see cref="M:InTheHand.Net.Bluetooth.Widcomm.WidcommRfcommStream.AbortIf(System.Collections.Generic.IList{InTheHand.Net.AsyncResult{System.Int32,InTheHand.Net.Bluetooth.Widcomm.WidcommRfcommStream.BeginReadParameters}}, System.Collections.Generic.IList{InTheHand.Net.AsyncNoResult{InTheHand.Net.Bluetooth.Widcomm.WidcommRfcommStream.BeginReadParameters}})"/>
            on.</param>
            <param name="allWrite">Out: to call <see cref="M:InTheHand.Net.Bluetooth.Widcomm.WidcommRfcommStream.AbortIf(System.Collections.Generic.IList{InTheHand.Net.AsyncResult{System.Int32,InTheHand.Net.Bluetooth.Widcomm.WidcommRfcommStream.BeginReadParameters}}, System.Collections.Generic.IList{InTheHand.Net.AsyncNoResult{InTheHand.Net.Bluetooth.Widcomm.WidcommRfcommStream.BeginReadParameters}})"/>
            on.</param>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.Factory.CommonRfcommStream.CloseInternalAndAbort_willLock">
            <summary>
            Close the connection from the network/stack side (not from the consumer side).
            </summary>
            -
            <remarks>
            <para>When we call Close the object is disposed and outstanding and
            new operations fail with ObjectDisposedException.  This method
            instead closes the connection from the network/stack side and thus
            operations fail with an IO error etc.
            </para>
            </remarks>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.Factory.CommonRfcommStream.TryBondingIf_inLock(InTheHand.Net.BluetoothAddress,System.Int32,System.Exception@)">
            <summary>
            DEPRECATED, should return false.
            </summary>
            <returns>Whether Bonding was attempted and thus the connect should be retried.
            </returns>
        </member>
        <member name="P:InTheHand.Net.Bluetooth.Factory.CommonRfcommStream.Connected">
            <summary>
            Used by Client, note from MSDN Socket.Connected:
            "Gets a value that indicates whether a Socket is connected to a remote host as of the last Send or Receive operation."
            </summary>
            -
            <remarks>
            <para>From MSDN <see cref="P:System.Net.Sockets.Socket.Connected"/>:
            "Gets a value that indicates whether a Socket is connected to a remote host as of the last Send or Receive operation."
            From MSDN <see cref="P:System.Net.Sockets.TcpClient.Connected"/>:
            "true if the Client socket was connected to a remote resource as of the most recent operation; otherwise, false."
            </para>
            </remarks>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.Widcomm.WidcommRfcommStreamBase.Bond(InTheHand.Net.BluetoothAddress,System.String)">
            <summary>
            Wrapper around CBtIf::Bond().
            </summary>
            <param name="device"><see cref="T:InTheHand.Net.BluetoothAddress"/></param>
            <param name="passcode"><see cref="T:System.String"/></param>
            <returns><see langword="true"/> if pairing was completed.
            <see langword="false"/> if were already paired, or pairing failed.
            </returns>
        </member>
        <member name="T:InTheHand.Net.Bluetooth.Msft.WindowsBluetoothListener">
            <summary>
            Listens for connections from Bluetooth network clients.
            </summary>
            <remarks>The <see cref="T:InTheHand.Net.Bluetooth.Msft.WindowsBluetoothListener"/> class provides simple methods that listen for and accept incoming connection requests in blocking synchronous mode.
            You can use either a <see cref="T:InTheHand.Net.Sockets.BluetoothClient"/> or a <see cref="T:System.Net.Sockets.Socket"/> to connect with a <see cref="T:InTheHand.Net.Bluetooth.Msft.WindowsBluetoothListener"/></remarks>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.Msft.WindowsBluetoothListener.Construct(System.Guid)">
            <overloads>
            Initializes a new instance of the <see cref="T:InTheHand.Net.Bluetooth.Msft.WindowsBluetoothListener"/> class.
            </overloads>
            ----
            <summary>
            Initializes a new instance of the <see cref="T:InTheHand.Net.Bluetooth.Msft.WindowsBluetoothListener"/> class
            to listen on the specified service identifier.
            </summary>
            <param name="service">The Bluetooth service to listen for.</param>
            <remarks>
            <para>
            An SDP record is published on successful <see cref="M:InTheHand.Net.Sockets.WindowsBluetoothListener.Start"/>
            to advertise the server.
            A generic record is created, containing the essential <c>ServiceClassIdList</c>
            and <c>ProtocolDescriptorList</c> attributes.  The specified service identifier is
            inserted into the former, and the RFCOMM Channel number that the server is
            listening on is inserted into the latter.  See the Bluetooth SDP specification
            for details on the use and format of SDP records.
            </para><para>
            If a SDP record with more elements is required, then use
            one of the other constructors that takes an SDP record e.g. 
            <see cref="M:InTheHand.Net.Sockets.WindowsBluetoothListener.#ctor(System.Guid,InTheHand.Net.Bluetooth.ServiceRecord)"/>,
            or when passing it as a byte array 
            <see cref="M:InTheHand.Net.Sockets.WindowsBluetoothListener.#ctor(System.Guid,System.Byte[],System.Int32)"/>.
            The format of the generic record used here is shown there also.
            </para><para>
            Call the <see cref="M:InTheHand.Net.Sockets.WindowsBluetoothListener.Start"/> 
            method to begin listening for incoming connection attempts.
            </para>
            </remarks>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.Msft.WindowsBluetoothListener.Construct(InTheHand.Net.BluetoothAddress,System.Guid)">
            <summary>
            Initializes a new instance of the <see cref="T:InTheHand.Net.Bluetooth.Msft.WindowsBluetoothListener"/> class
            that listens for incoming connection attempts on the specified local Bluetooth address and service identifier. 
            </summary>
            <param name="localAddress">A <see cref="T:InTheHand.Net.BluetoothAddress"/> that represents the local Bluetooth radio address.</param>
            <param name="service">The Bluetooth service on which to listen for incoming connection attempts.</param>
            <remarks>
            <para>
            An SDP record is published on successful <see cref="M:InTheHand.Net.Sockets.WindowsBluetoothListener.Start"/>
            to advertise the server.
            A generic record is created, containing the essential <c>ServiceClassIdList</c>
            and <c>ProtocolDescriptorList</c> attributes.  The specified service identifier is
            inserted into the former, and the RFCOMM Channel number that the server is
            listening on is inserted into the latter.  See the Bluetooth SDP specification
            for details on the use and format of SDP records.
            </para><para>
            If a SDP record with more elements is required, then use
            one of the other constructors that takes an SDP record e.g. 
            <see cref="M:InTheHand.Net.Sockets.WindowsBluetoothListener.#ctor(InTheHand.Net.BluetoothAddress,System.Guid,InTheHand.Net.Bluetooth.ServiceRecord)"/>,
            or when passing it as a byte array, e.g. 
            <see cref="M:InTheHand.Net.Sockets.WindowsBluetoothListener.#ctor(InTheHand.Net.BluetoothAddress,System.Guid,System.Byte[],System.Int32)"/>.
            The format of the generic record used here is shown there also.
            </para><para>
            Call the <see cref="M:InTheHand.Net.Sockets.WindowsBluetoothListener.Start"/> 
            method to begin listening for incoming connection attempts.
            </para>
            </remarks>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.Msft.WindowsBluetoothListener.Construct(InTheHand.Net.BluetoothEndPoint)">
            <summary>
            Initializes a new instance of the <see cref="T:InTheHand.Net.Bluetooth.Msft.WindowsBluetoothListener"/> class
            with the specified local endpoint.
            </summary>
            <param name="localEP">A <see cref="T:InTheHand.Net.BluetoothEndPoint"/> that represents the local endpoint to which to bind the listener <see cref="T:System.Net.Sockets.Socket"/>.</param>
            <remarks>
            <para>
            An SDP record is published on successful <see cref="M:InTheHand.Net.Sockets.WindowsBluetoothListener.Start"/>
            to advertise the server.
            A generic record is created, containing the essential <c>ServiceClassIdList</c>
            and <c>ProtocolDescriptorList</c> attributes.  The specified service identifier is
            inserted into the former, and the RFCOMM Channel number that the server is
            listening on is inserted into the latter.  See the Bluetooth SDP specification
            for details on the use and format of SDP records.
            </para><para>
            If a SDP record with more elements is required, then use
            one of the other constructors that takes an SDP record e.g. 
            <see cref="M:InTheHand.Net.Sockets.WindowsBluetoothListener.#ctor(InTheHand.Net.BluetoothEndPoint,InTheHand.Net.Bluetooth.ServiceRecord)"/>,
            or when passing it as a byte array
            <see cref="M:InTheHand.Net.Sockets.WindowsBluetoothListener.#ctor(InTheHand.Net.BluetoothEndPoint,System.Byte[],System.Int32)"/>.
            The format of the generic record used here is shown there also.
            </para><para>
            Call the <see cref="M:InTheHand.Net.Sockets.WindowsBluetoothListener.Start"/> 
            method to begin listening for incoming connection attempts.
            </para>
            </remarks>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.Msft.WindowsBluetoothListener.Construct(System.Guid,System.Byte[],System.Int32)">
            <summary>
            Initializes a new instance of the <see cref="T:InTheHand.Net.Bluetooth.Msft.WindowsBluetoothListener"/> class
            to listen on the specified service identifier, 
            publishing the specified SDP record.
            </summary>
            <param name="service">The Bluetooth service to listen for.</param>
            <param name="sdpRecord">Prepared SDP Record to publish.</param>
            <param name="channelOffset">
            The index in the <paramref name="sdpRecord"/> byte array where the RFCOMM Channel Number that the
            server is listening on is to be placed.
            However the supplied record is now parsed into an <see cref="T:InTheHand.Net.Bluetooth.ServiceRecord"/>
            instance, and the channel offset is not used.
            </param>
            <remarks>
            <note>
            The constructors taking the SDP record explicitly (as a byte array) should
            only be used if
            a specialized SDP record is required. For instance when using one of the
            standard profiles.  Otherwise use one of the other constructors 
            e.g. <see cref="M:InTheHand.Net.Sockets.WindowsBluetoothListener.#ctor(System.Guid)"/>
            which create a generic SDP Record from the specified service identifier.
            </note>
            <para>Instead of passing a byte array containing a hand-built record,
            the record can also be built using the <see cref="T:InTheHand.Net.Bluetooth.ServiceRecord"/>
            and <see cref="T:InTheHand.Net.Bluetooth.ServiceElement"/> classes, and
            passed to the respective constuctor, e.g.
            <see cref="M:InTheHand.Net.Sockets.WindowsBluetoothListener.#ctor(System.Guid,InTheHand.Net.Bluetooth.ServiceRecord)"/>
            </para>
            <para>Any useful SDP record will include 
            a <c>ProtocolDescriptor</c> element containing
            the RFCOMM Channel number that the server is listening on,
            and a <c>ServiceClassId</c> element containing the service UUIDs.
            The record supplied in the <paramref name="sdpRecord"/> parameter
            should contain those elements.  On successful <see cref="M:InTheHand.Net.Sockets.WindowsBluetoothListener.Start"/>,
            the RFCOMM Channel number that the protocol stack has assigned to the
            server is retrieved, and copied into the service record before it is
            published.  The <paramref name="channelOffset"/> indicates the location
            of the respective byte in the <paramref name="sdpRecord"/> byte array.
            </para>
            <para>
            An example SDP record is as follows.  This is actually the format of the 
            generic record used in the other constructors.  For another example see
            the code in the <c>ObexListener</c> class.
            <code>
            // The asterisks note where the Service UUID and the Channel number are
            // to be filled in.
            byte[] record = new byte[] {
              //Element Sequence:
              0x35,0x27,
                //UInt16: 0x0001  -- ServiceClassIdList
                0x09,0x00,0x01,
                //Element Sequence:
                0x35,0x11,
                //  UUID128: 00000000-0000-0000-0000-000000000000 -- * Service UUID
                    0x1c,
                      0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,
                      0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,
                //
                //UInt16: 0x0004  -- ProtocolDescriptorList
                0x09,0x00,0x04,
                //Element Sequence:
                0x35,0x0c,
                //  Element Sequence:
                    0x35,0x03,
                //      UUID16: 0x0100  -- L2CAP
                        0x19,0x01,0x00,
                //  Element Sequence:
                    0x35,0x05,
                //      UUID16: 0x0003  -- RFCOMM
                        0x19,0x00,0x03,
                //      UInt8: 0x00     -- * Channel Number
                        0x08,0x00
            };
            </code>
            For that record the <c>channelOffset</c> is 40.
            </para>
            </remarks>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.Msft.WindowsBluetoothListener.Construct(InTheHand.Net.BluetoothAddress,System.Guid,System.Byte[],System.Int32)">
            <summary>
            Initializes a new instance of the <see cref="T:InTheHand.Net.Bluetooth.Msft.WindowsBluetoothListener"/> class
            that listens for incoming connection attempts on the specified local Bluetooth address and service identifier,
            publishing the specified SDP record.
            </summary>
            <param name="localAddress">A <see cref="T:InTheHand.Net.BluetoothAddress"/> that represents the local Bluetooth radio address.</param>
            <param name="service">The Bluetooth service to listen for.</param>
            <param name="sdpRecord">Prepared SDP Record to publish</param>
            <param name="channelOffset">
            The index in the <paramref name="sdpRecord"/> byte array where the RFCOMM Channel Number that the
            server is listening on is to be placed.
            However the supplied record is now parsed into an <see cref="T:InTheHand.Net.Bluetooth.ServiceRecord"/>
            instance, and the channel offset is not used.
            </param>
            <remarks>
            <note>
            The constructors taking the SDP record explicitly (as a byte array) should
            only be used if
            a specialized SDP record is required. For instance when using one of the
            standard profiles.  Otherwise use one of the other constructors 
            e.g. <see cref="M:InTheHand.Net.Sockets.WindowsBluetoothListener.#ctor(InTheHand.Net.BluetoothAddress,System.Guid)"/>
            which create a generic SDP Record from the specified service identifier.
            </note>
            <para>Instead of passing a byte array containing a hand-built record,
            the record can also be built using the <see cref="T:InTheHand.Net.Bluetooth.ServiceRecord"/>
            and <see cref="T:InTheHand.Net.Bluetooth.ServiceElement"/> classes, and
            passed to the respective constuctor, e.g.
            <see cref="M:InTheHand.Net.Sockets.WindowsBluetoothListener.#ctor(InTheHand.Net.BluetoothAddress,System.Guid,InTheHand.Net.Bluetooth.ServiceRecord)"/>
            </para>
            <para>Any useful SDP record will include 
            a <c>ProtocolDescriptor</c> element containing
            the RFCOMM Channel number that the server is listening on,
            and a <c>ServiceClassId</c> element containing the service UUIDs.
            The record supplied in the <paramref name="sdpRecord"/> parameter
            should contain those elements.  On successful <see cref="M:InTheHand.Net.Sockets.WindowsBluetoothListener.Start"/>,
            the RFCOMM Channel number that the protocol stack has assigned to the
            server is retrieved, and copied into the service record before it is
            published.  The <paramref name="channelOffset"/> indicates the location
            of the respective byte in the <paramref name="sdpRecord"/> byte array.
            </para>
            <para>
            An example SDP record is as follows.  This is actually the format of the 
            generic record used in the other constructors.  For another example see
            the code in the <c>ObexListener</c> class.
            <code>
            // The asterisks note where the Service UUID and the Channel number are
            // to be filled in.
            byte[] record = new byte[] {
              //Element Sequence:
              0x35,0x27,
                //UInt16: 0x0001  -- ServiceClassIdList
                0x09,0x00,0x01,
                //Element Sequence:
                0x35,0x11,
                //  UUID128: 00000000-0000-0000-0000-000000000000 -- * Service UUID
                    0x1c,
                      0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,
                      0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,
                //
                //UInt16: 0x0004  -- ProtocolDescriptorList
                0x09,0x00,0x04,
                //Element Sequence:
                0x35,0x0c,
                //  Element Sequence:
                    0x35,0x03,
                //      UUID16: 0x0100  -- L2CAP
                        0x19,0x01,0x00,
                //  Element Sequence:
                    0x35,0x05,
                //      UUID16: 0x0003  -- RFCOMM
                        0x19,0x00,0x03,
                //      UInt8: 0x00     -- * Channel Number
                        0x08,0x00
            };
            </code>
            For that record the <c>channelOffset</c> is 40.
            </para>
            </remarks>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.Msft.WindowsBluetoothListener.Construct(InTheHand.Net.BluetoothEndPoint,System.Byte[],System.Int32)">
            <summary>
            Initializes a new instance of the <see cref="T:InTheHand.Net.Bluetooth.Msft.WindowsBluetoothListener"/> class
            with the specified local endpoint,
            publishing the specified SDP record.
            </summary>
            <param name="localEP">A <see cref="T:InTheHand.Net.BluetoothEndPoint"/> that represents the local endpoint to which to bind the listener <see cref="T:System.Net.Sockets.Socket"/>.</param>
            <param name="sdpRecord">Prepared SDP Record to publish</param>
            <param name="channelOffset">
            The index in the <paramref name="sdpRecord"/> byte array where the RFCOMM Channel Number that the
            server is listening on is to be placed.
            However the supplied record is now parsed into an <see cref="T:InTheHand.Net.Bluetooth.ServiceRecord"/>
            instance, and the channel offset is not used.
            </param>
            <remarks>
            <note>
            The constructors taking the SDP record explicitly (as a byte array) should
            only be used if
            a specialized SDP record is required. For instance when using one of the
            standard profiles.  Otherwise use one of the other constructors 
            e.g. <see cref="M:InTheHand.Net.Sockets.WindowsBluetoothListener.#ctor(InTheHand.Net.BluetoothEndPoint)"/>
            which create a generic SDP Record from the specified service identifier.
            </note>
            <para>Instead of passing a byte array containing a hand-built record,
            the record can also be built using the <see cref="T:InTheHand.Net.Bluetooth.ServiceRecord"/>
            and <see cref="T:InTheHand.Net.Bluetooth.ServiceElement"/> classes, and
            passed to the respective constuctor, e.g.
            <see cref="M:InTheHand.Net.Sockets.WindowsBluetoothListener.#ctor(InTheHand.Net.BluetoothEndPoint,InTheHand.Net.Bluetooth.ServiceRecord)"/>
            </para>
            <para>Any useful SDP record will include 
            a <c>ProtocolDescriptor</c> element containing
            the RFCOMM Channel number that the server is listening on,
            and a <c>ServiceClassId</c> element containing the service UUIDs.
            The record supplied in the <paramref name="sdpRecord"/> parameter
            should contain those elements.  On successful <see cref="M:InTheHand.Net.Sockets.WindowsBluetoothListener.Start"/>,
            the RFCOMM Channel number that the protocol stack has assigned to the
            server is retrieved, and copied into the service record before it is
            published.  The <paramref name="channelOffset"/> indicates the location
            of the respective byte in the <paramref name="sdpRecord"/> byte array.
            </para>
            <para>
            An example SDP record is as follows.  This is actually the format of the 
            generic record used in the other constructors.  For another example see
            the code in the <c>ObexListener</c> class.
            <code>
            // The asterisks note where the Service UUID and the Channel number are
            // to be filled in.
            byte[] record = new byte[] {
              //Element Sequence:
              0x35,0x27,
                //UInt16: 0x0001  -- ServiceClassIdList
                0x09,0x00,0x01,
                //Element Sequence:
                0x35,0x11,
                //  UUID128: 00000000-0000-0000-0000-000000000000 -- * Service UUID
                    0x1c,
                      0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,
                      0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,
                //
                //UInt16: 0x0004  -- ProtocolDescriptorList
                0x09,0x00,0x04,
                //Element Sequence:
                0x35,0x0c,
                //  Element Sequence:
                    0x35,0x03,
                //      UUID16: 0x0100  -- L2CAP
                        0x19,0x01,0x00,
                //  Element Sequence:
                    0x35,0x05,
                //      UUID16: 0x0003  -- RFCOMM
                        0x19,0x00,0x03,
                //      UInt8: 0x00     -- * Channel Number
                        0x08,0x00
            };
            </code>
            For that record the <c>channelOffset</c> is 40.
            </para>
            </remarks>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.Msft.WindowsBluetoothListener.Construct(System.Guid,InTheHand.Net.Bluetooth.ServiceRecord)">
            <summary>
            Initializes a new instance of the <see cref="T:InTheHand.Net.Bluetooth.Msft.WindowsBluetoothListener"/> class
            to listen on the specified service identifier, 
            publishing the specified SDP record.
            </summary>
            -
            <param name="service">The Bluetooth service to listen for.</param>
            <param name="sdpRecord">Prepared SDP Record to publish.</param>
            -
            <remarks>
            <note>
            The constructors taking the SDP record explicitly should
            only be used if
            a specialized SDP record is required. For instance when using one of the
            standard profiles.  Otherwise use one of the other constructors 
            e.g. <see cref="M:InTheHand.Net.Sockets.WindowsBluetoothListener.#ctor(System.Guid)"/>
            which create a generic SDP Record from the specified service identifier.
            </note>
            <para>Any useful SDP record will include 
            a <c>ProtocolDescriptor</c> element containing
            the RFCOMM Channel number that the server is listening on,
            and a <c>ServiceClassId</c> element containing the service UUIDs.
            The record supplied in the <paramref name="sdpRecord"/> parameter
            should contain those elements.  On successful <see cref="M:InTheHand.Net.Sockets.WindowsBluetoothListener.Start"/>,
            the RFCOMM Channel number that the protocol stack has assigned to the
            server is retrieved, and copied into the service record before it is
            published.
            </para>
            <para>
            An example SDP record is as follows.  This is actually the format of the 
            generic record used in the other constructors.  For another example see
            the code in the <c>ObexListener</c> class.
            <code lang="C#">
            private static ServiceRecord CreateBasicRfcommRecord(Guid serviceClassUuid)
            {
                ServiceElement pdl = ServiceRecordHelper.CreateRfcommProtocolDescriptorList();
                ServiceElement classList = new ServiceElement(ElementType.ElementSequence,
                    new ServiceElement(ElementType.Uuid128, serviceClassUuid));
                ServiceRecord record = new ServiceRecord(
                    new ServiceAttribute(
                        InTheHand.Net.Bluetooth.AttributeIds.UniversalAttributeId.ServiceClassIdList,
                        classList),
                    new ServiceAttribute(
                        InTheHand.Net.Bluetooth.AttributeIds.UniversalAttributeId.ProtocolDescriptorList,
                        pdl));
                return record;
            }
            </code>
            </para>
            </remarks>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.Msft.WindowsBluetoothListener.Construct(InTheHand.Net.BluetoothAddress,System.Guid,InTheHand.Net.Bluetooth.ServiceRecord)">
            <summary>
            Initializes a new instance of the <see cref="T:InTheHand.Net.Bluetooth.Msft.WindowsBluetoothListener"/> class
            that listens for incoming connection attempts on the specified local Bluetooth address and service identifier,
            publishing the specified SDP record.
            </summary>
            -
            <param name="localAddress">A <see cref="T:InTheHand.Net.BluetoothAddress"/> that represents the local Bluetooth radio address.</param>
            <param name="service">The Bluetooth service to listen for.</param>
            <param name="sdpRecord">Prepared SDP Record to publish</param>
            -
            <remarks>
            <note>
            The constructors taking the SDP record explicitly should
            only be used if
            a specialized SDP record is required. For instance when using one of the
            standard profiles.  Otherwise use one of the other constructors 
            e.g. <see cref="M:InTheHand.Net.Sockets.WindowsBluetoothListener.#ctor(InTheHand.Net.BluetoothAddress,System.Guid)"/>
            which create a generic SDP Record from the specified service identifier.
            </note>
            <para>Any useful SDP record will include 
            a <c>ProtocolDescriptor</c> element containing
            the RFCOMM Channel number that the server is listening on,
            and a <c>ServiceClassId</c> element containing the service UUIDs.
            The record supplied in the <paramref name="sdpRecord"/> parameter
            should contain those elements.  On successful <see cref="M:InTheHand.Net.Sockets.WindowsBluetoothListener.Start"/>,
            the RFCOMM Channel number that the protocol stack has assigned to the
            server is retrieved, and copied into the service record before it is
            published.
            </para>
            <para>
            An example SDP record is as follows.  This is actually the format of the 
            generic record used in the other constructors.  For another example see
            the code in the <c>ObexListener</c> class.
            <code lang="C#">
            private static ServiceRecord CreateBasicRfcommRecord(Guid serviceClassUuid)
            {
                ServiceElement pdl = ServiceRecordHelper.CreateRfcommProtocolDescriptorList();
                ServiceElement classList = new ServiceElement(ElementType.ElementSequence,
                    new ServiceElement(ElementType.Uuid128, serviceClassUuid));
                ServiceRecord record = new ServiceRecord(
                    new ServiceAttribute(
                        InTheHand.Net.Bluetooth.AttributeIds.UniversalAttributeId.ServiceClassIdList,
                        classList),
                    new ServiceAttribute(
                        InTheHand.Net.Bluetooth.AttributeIds.UniversalAttributeId.ProtocolDescriptorList,
                        pdl));
                return record;
            }
            </code>
            </para>
            </remarks>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.Msft.WindowsBluetoothListener.Construct(InTheHand.Net.BluetoothEndPoint,InTheHand.Net.Bluetooth.ServiceRecord)">
            <summary>
            Initializes a new instance of the <see cref="T:InTheHand.Net.Bluetooth.Msft.WindowsBluetoothListener"/> class
            with the specified local endpoint,
            publishing the specified SDP record.
            </summary>
            <param name="localEP">A <see cref="T:InTheHand.Net.BluetoothEndPoint"/> that represents the local endpoint to which to bind the listener <see cref="T:System.Net.Sockets.Socket"/>.</param>
            <param name="sdpRecord">Prepared SDP Record to publish</param>
            -
            <remarks>
            <note>
            The constructors taking the SDP record explicitly (as a byte array) should
            only be used if
            a specialized SDP record is required. For instance when using one of the
            standard profiles.  Otherwise use one of the other constructors 
            e.g. <see cref="M:InTheHand.Net.Sockets.WindowsBluetoothListener.#ctor(InTheHand.Net.BluetoothEndPoint)"/>
            which create a generic SDP Record from the specified service identifier.
            </note>
            <para>Any useful SDP record will include 
            a <c>ProtocolDescriptor</c> element containing
            the RFCOMM Channel number that the server is listening on,
            and a <c>ServiceClassId</c> element containing the service UUIDs.
            The record supplied in the <paramref name="sdpRecord"/> parameter
            should contain those elements.  On successful <see cref="M:InTheHand.Net.Sockets.WindowsBluetoothListener.Start"/>,
            the RFCOMM Channel number that the protocol stack has assigned to the
            server is retrieved, and copied into the service record before it is
            published.
            </para>
            <para>
            An example SDP record is as follows.  This is actually the format of the 
            generic record used in the other constructors.  For another example see
            the code in the <c>ObexListener</c> class.
            <code lang="C#">
            private static ServiceRecord CreateBasicRfcommRecord(Guid serviceClassUuid)
            {
                ServiceElement pdl = ServiceRecordHelper.CreateRfcommProtocolDescriptorList();
                ServiceElement classList = new ServiceElement(ElementType.ElementSequence,
                    new ServiceElement(ElementType.Uuid128, serviceClassUuid));
                ServiceRecord record = new ServiceRecord(
                    new ServiceAttribute(
                        InTheHand.Net.Bluetooth.AttributeIds.UniversalAttributeId.ServiceClassIdList,
                        classList),
                    new ServiceAttribute(
                        InTheHand.Net.Bluetooth.AttributeIds.UniversalAttributeId.ProtocolDescriptorList,
                        pdl));
                return record;
            }
            </code>
            </para>
            </remarks>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.Msft.WindowsBluetoothListener.Start">
            <summary>
            Starts listening for incoming connection requests.
            </summary>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.Msft.WindowsBluetoothListener.Start(System.Int32)">
            <summary>
            Starts listening for incoming connection requests with a maximum number of pending connection.
            </summary>
            <param name="backlog">The maximum length of the pending connections queue.</param>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.Msft.WindowsBluetoothListener.Stop">
            <summary>
            Stops the socket from monitoring connections.
            </summary>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.Msft.WindowsBluetoothListener.BeginAcceptSocket(System.AsyncCallback,System.Object)">
            <summary>
            Begins an asynchronous operation to accept an incoming connection attempt.
            </summary>
            <param name="callback">An <see cref="T:System.AsyncCallback"/> delegate that references the method to invoke when the operation is complete.</param>
            <param name="state">A user-defined object containing information about the accept operation.
            This object is passed to the callback delegate when the operation is complete.</param>
            <returns>An <see cref="T:System.IAsyncResult"/> that references the asynchronous creation of the <see cref="T:System.Net.Sockets.Socket"/>.</returns>
            <exception cref="T:System.ObjectDisposedException">The <see cref="T:System.Net.Sockets.Socket"/> has been closed.</exception>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.Msft.WindowsBluetoothListener.EndAcceptSocket(System.IAsyncResult)">
            <summary>
            Asynchronously accepts an incoming connection attempt and creates a new <see cref="T:System.Net.Sockets.Socket"/> to handle remote host communication.
            </summary>
            <param name="asyncResult">An <see cref="T:System.IAsyncResult"/> returned by a call to the <see cref="M:InTheHand.Net.Bluetooth.Msft.WindowsBluetoothListener.BeginAcceptSocket(System.AsyncCallback,System.Object)"/> method.</param>
            <returns>A <see cref="T:System.Net.Sockets.Socket"/>.</returns>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.Msft.WindowsBluetoothListener.BeginAcceptBluetoothClient(System.AsyncCallback,System.Object)">
            <summary>
            Begins an asynchronous operation to accept an incoming connection attempt.
            </summary>
            <param name="callback"></param>
            <param name="state"></param>
            <returns></returns>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.Msft.WindowsBluetoothListener.EndAcceptBluetoothClient(System.IAsyncResult)">
            <summary>
            Asynchronously accepts an incoming connection attempt and creates a new <see cref="T:InTheHand.Net.Sockets.BluetoothClient"/> to handle remote host communication.
            </summary>
            <param name="asyncResult">An <see cref="T:System.IAsyncResult"/> returned by a call to the <see cref="M:InTheHand.Net.Bluetooth.Msft.WindowsBluetoothListener.BeginAcceptBluetoothClient(System.AsyncCallback,System.Object)"/> method.</param>
            <returns>A <see cref="T:InTheHand.Net.Sockets.BluetoothClient"/>.</returns>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.Msft.WindowsBluetoothListener.AcceptSocket">
            <summary>
            Creates a new socket for a connection.
            </summary>
            <remarks>AcceptSocket is a blocking method that returns a <see cref="T:System.Net.Sockets.Socket"/> that you can use to send and receive data.
            If you want to avoid blocking, use the <see cref="M:InTheHand.Net.Bluetooth.Msft.WindowsBluetoothListener.Pending"/> method to determine if connection requests are available in the incoming connection queue.
            <para>The <see cref="T:System.Net.Sockets.Socket"/> returned is initialized with the address and channel number of the remote device.
            You can use any of the Send and Receive methods available in the <see cref="T:System.Net.Sockets.Socket"/> class to communicate with the remote device.
            When you are finished using the <see cref="T:System.Net.Sockets.Socket"/>, be sure to call its <see cref="M:System.Net.Sockets.Socket.Close"/> method.
            If your application is relatively simple, consider using the <see cref="M:InTheHand.Net.Bluetooth.Msft.WindowsBluetoothListener.AcceptBluetoothClient"/> method rather than the AcceptSocket method.
            <see cref="T:InTheHand.Net.Sockets.BluetoothClient"/> provides you with simple methods for sending and receiving data over a network in blocking synchronous mode.</para></remarks>
            <returns>A <see cref="T:System.Net.Sockets.Socket"/> used to send and receive data.</returns>
            <exception cref="T:System.InvalidOperationException">Listener is stopped.</exception>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.Msft.WindowsBluetoothListener.AcceptBluetoothClient">
            <summary>
            Creates a client object for a connection when the specified service or endpoint is detected by the listener component.
            </summary>
            <remarks>AcceptTcpClient is a blocking method that returns a <see cref="T:InTheHand.Net.Sockets.BluetoothClient"/> that you can use to send and receive data.
            Use the <see cref="M:InTheHand.Net.Bluetooth.Msft.WindowsBluetoothListener.Pending"/> method to determine if connection requests are available in the incoming connection queue if you want to avoid blocking.
            <para>Use the <see cref="M:InTheHand.Net.Sockets.BluetoothClient.GetStream"/> method to obtain the underlying <see cref="T:System.Net.Sockets.NetworkStream"/> of the returned <see cref="T:InTheHand.Net.Sockets.BluetoothClient"/>.
            The <see cref="T:System.Net.Sockets.NetworkStream"/> will provide you with methods for sending and receiving with the remote host.
            When you are through with the <see cref="T:InTheHand.Net.Sockets.BluetoothClient"/>, be sure to call its <see cref="M:InTheHand.Net.Sockets.BluetoothClient.Close"/> method.
            If you want greater flexibility than a <see cref="T:InTheHand.Net.Sockets.BluetoothClient"/> offers, consider using <see cref="M:InTheHand.Net.Bluetooth.Msft.WindowsBluetoothListener.AcceptSocket"/>.</para></remarks>
            <returns>A <see cref="T:InTheHand.Net.Sockets.BluetoothClient"/> component.</returns>
            <exception cref="T:System.InvalidOperationException">Listener is stopped.</exception>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.Msft.WindowsBluetoothListener.Pending">
            <summary>
            Determines if there is a connection pending.
            </summary>
            <returns>true if there is a connection pending; otherwise, false.</returns>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.Msft.WindowsBluetoothListener.SetPin(InTheHand.Net.BluetoothAddress,System.String)">
            <summary>
            Set or change the PIN to be used with a specific remote device.
            </summary>
            <param name="device">Address of Bluetooth device.</param>
            <param name="pin">PIN string consisting of 1 to 16 ASCII characters.</param>
            <remarks>Assigning null (Nothing in VB) or an empty String will revoke the PIN.</remarks>
        </member>
        <member name="P:InTheHand.Net.Bluetooth.Msft.WindowsBluetoothListener.LocalEndPoint">
            <summary>
             Gets the underlying <see cref="T:InTheHand.Net.BluetoothEndPoint"/> of the current <see cref="T:InTheHand.Net.Bluetooth.Msft.WindowsBluetoothListener"/>.  
            </summary>
        </member>
        <member name="P:InTheHand.Net.Bluetooth.Msft.WindowsBluetoothListener.ServiceClass">
            <summary>
            Get or set the Service Class flags that this service adds to the host 
            device&#x2019;s Class Of Device field.
            </summary>
            -
            <remarks>
            <para>The Class of Device value contains a Device part which describes 
            the primary service that the device provides, and a Service part which 
            is a set of flags indicating all the service types that the device supports, 
            e.g. <see cref="F:InTheHand.Net.Bluetooth.ServiceClass.ObjectTransfer"/>,
            <see cref="F:InTheHand.Net.Bluetooth.ServiceClass.Telephony"/>,
            <see cref="F:InTheHand.Net.Bluetooth.ServiceClass.Audio"/> etc.
            This property supports setting those flags; bits set in this value will be 
            added to the host device&#x2019;s CoD Service Class bits when the listener
            is active.
            </para>
            <para><note>Supported on Win32, but not supported on WindowsMobile/WinCE 
            as there's no native API for it.  The WindowCE section of MSDN mentions the
            Registry value <c>COD</c> at key <c>HKEY_LOCAL_MACHINE\Software\Microsoft\Bluetooth\sys</c>. 
            However my (Jam) has value 0x920100 there but advertises a CoD of 0x100114, 
            so its not clear how the values relate to each other.
            </note>
            </para>
            </remarks>
        </member>
        <member name="P:InTheHand.Net.Bluetooth.Msft.WindowsBluetoothListener.ServiceName">
            <summary>
            Get or set the ServiceName the server will use in its SDP Record.
            </summary>
            -
            <value>A string representing the value to be used for the Service Name
            SDP Attribute.  Will be <see langword="null"/> if not specfied.
            </value>
            -
            <exception cref="T:System.InvalidOperationException">
            The listener is already started.
            <para>- or -</para>
            A custom Service Record was given at initialization time.  In that case 
            the ServiceName attribute should be added to that record.
            </exception>
        </member>
        <member name="P:InTheHand.Net.Bluetooth.Msft.WindowsBluetoothListener.Server">
            <summary>
            Gets the underlying network <see cref="T:System.Net.Sockets.Socket"/>.
            </summary>
            <value>The underlying <see cref="T:System.Net.Sockets.Socket"/>.</value>
            <remarks><see cref="T:InTheHand.Net.Bluetooth.Msft.WindowsBluetoothListener"/> creates a <see cref="T:System.Net.Sockets.Socket"/> to listen for incoming client connection requests.
            Classes deriving from <see cref="T:InTheHand.Net.Bluetooth.Msft.WindowsBluetoothListener"/> can use this property to get this <see cref="T:System.Net.Sockets.Socket"/>.
            Use the underlying <see cref="T:System.Net.Sockets.Socket"/> returned by the <see cref="P:InTheHand.Net.Bluetooth.Msft.WindowsBluetoothListener.Server"/> property if you require access beyond that which <see cref="T:InTheHand.Net.Bluetooth.Msft.WindowsBluetoothListener"/> provides.
            <para>Note <see cref="P:InTheHand.Net.Bluetooth.Msft.WindowsBluetoothListener.Server"/> property only returns the <see cref="T:System.Net.Sockets.Socket"/> used to listen for incoming client connection requests.
            Use the <see cref="M:InTheHand.Net.Bluetooth.Msft.WindowsBluetoothListener.AcceptSocket"/> method to accept a pending connection request and obtain a <see cref="T:System.Net.Sockets.Socket"/> for sending and receiving data.
            You can also use the <see cref="M:InTheHand.Net.Bluetooth.Msft.WindowsBluetoothListener.AcceptBluetoothClient"/> method to accept a pending connection request and obtain a <see cref="T:InTheHand.Net.Sockets.BluetoothClient"/> for sending and receiving data.</para></remarks>
        </member>
        <member name="P:InTheHand.Net.Bluetooth.Msft.WindowsBluetoothListener.ServiceRecord">
            <summary>
            Returns the SDP Service Record for this service.
            </summary>
            <remarks>
            <note>Returns <see langword="null"/> if the listener is not 
            <see cref="M:InTheHand.Net.Sockets.WindowsBluetoothListener.Start"/>ed
            (and an record wasn&#x2019;t supplied at initialization).
            </note>
            </remarks>
        </member>
        <member name="P:InTheHand.Net.Bluetooth.Msft.WindowsBluetoothListener.Authenticate">
            <summary>
            Gets or sets the authentication state of the current connect or behaviour to use when connection is established.
            </summary>
            <remarks>
            For disconnected sockets, specifies that authentication is required in order for a connect or accept operation to complete successfully.
            Setting this option actively initiates authentication during connection establishment, if the two Bluetooth devices were not previously authenticated.
            The user interface for passkey exchange, if necessary, is provided by the operating system outside the application context.
            For outgoing connections that require authentication, the connect operation fails with WSAEACCES if authentication is not successful.
            In response, the application may prompt the user to authenticate the two Bluetooth devices before connection.
            For incoming connections, the connection is rejected if authentication cannot be established and returns a WSAEHOSTDOWN error.
            </remarks>
        </member>
        <member name="P:InTheHand.Net.Bluetooth.Msft.WindowsBluetoothListener.Encrypt">
            <summary>
            On unconnected sockets, enforces encryption to establish a connection.
            Encryption is only available for authenticated connections.
            For incoming connections, a connection for which encryption cannot be established is automatically rejected and returns WSAEHOSTDOWN as the error.
            For outgoing connections, the connect function fails with WSAEACCES if encryption cannot be established.
            In response, the application may prompt the user to authenticate the two Bluetooth devices before connection.
            </summary>
        </member>
        <member name="P:InTheHand.Net.Bluetooth.BlueSoleil.SerialPortNetworkStream.Connected">
            <summary>
            For FooBarClient.Connected
            </summary>
        </member>
        <member name="T:InTheHand.Net.AsyncResultCompletion">
            <summary>
            Used with
            <see cref="M:InTheHand.Net.AsyncResultNoResult.SetAsCompleted(System.Exception,InTheHand.Net.AsyncResultCompletion)">
            AsyncResultNoResult.SetAsCompleted</see> and 
            <see cref="M:InTheHand.Net.AsyncResult{TResult}.SetAsCompleted(TResult,AsyncResultNoResult.AsyncResultCompletion)">
            AsyncResult&lt;TResult&gt;.SetAsCompleted</see>.
            </summary>
        </member>
        <member name="F:InTheHand.Net.AsyncResultCompletion.IsSync">
            <summary>
            Equivalent to <c>true</c> for the <see cref="T:System.Boolean"/>
            #x201C;completedSynchronously&#x201D; parameter.
            </summary>
        </member>
        <member name="F:InTheHand.Net.AsyncResultCompletion.IsAsync">
            <summary>
            Equivalent to <c>false</c> for the <see cref="T:System.Boolean"/>
            #x201C;completedSynchronously&#x201D; parameter.
            </summary>
        </member>
        <member name="F:InTheHand.Net.AsyncResultCompletion.MakeAsync">
            <summary>
            Forces the callback to run on a thread-pool thread.
            </summary>
        </member>
        <member name="T:InTheHand.Net.Sockets.IrDAListener">
            <summary>
            Places a socket in a listening state to monitor infrared connections from a specified service or network address.
            </summary>
            <remarks>This class monitors a service by specifying a service name or a network address.
            The listener does not listen until you call one of the <see cref="M:InTheHand.Net.Sockets.IrDAListener.Start"/>
            methods.</remarks>
            <seealso cref="T:System.Net.Sockets.IrDAListener"/>
        </member>
        <member name="M:InTheHand.Net.Sockets.IrDAListener.#ctor(InTheHand.Net.IrDAEndPoint)">
            <summary>
            Initializes a new instance of the <see cref="T:InTheHand.Net.Sockets.IrDAListener"/> class.
            </summary>
            <param name="ep">The network address to monitor for making a connection.</param>
        </member>
        <member name="M:InTheHand.Net.Sockets.IrDAListener.#ctor(System.String)">
            <summary>
            Initializes a new instance of the <see cref="T:InTheHand.Net.Sockets.IrDAListener"/> class.
            </summary>
            <param name="service">The name of the service to listen for.</param>
        </member>
        <member name="M:InTheHand.Net.Sockets.IrDAListener.Start">
            <summary>
            Starts listening for incoming connection requests.
            </summary>
        </member>
        <member name="M:InTheHand.Net.Sockets.IrDAListener.Start(System.Int32)">
            <summary>
            Starts listening for incoming connection requests with a maximum number of pending connection.
            </summary>
            <param name="backlog">The maximum length of the pending connections queue.</param>
        </member>
        <member name="M:InTheHand.Net.Sockets.IrDAListener.Stop">
            <summary>
            Stops the socket from monitoring connections.
            </summary>
        </member>
        <member name="M:InTheHand.Net.Sockets.IrDAListener.AcceptSocket">
            <summary>
            Creates a new socket for a connection.
            </summary>
            <returns>A socket.</returns>
        </member>
        <member name="M:InTheHand.Net.Sockets.IrDAListener.AcceptIrDAClient">
            <summary>
            Creates a client object for a connection when the specified service or endpoint is detected by the listener component.
            </summary>
            <returns>An <see cref="T:InTheHand.Net.Sockets.IrDAClient"/> object.</returns>
        </member>
        <member name="M:InTheHand.Net.Sockets.IrDAListener.BeginAcceptSocket(System.AsyncCallback,System.Object)">
            <summary>
            Begins an asynchronous operation to accept an incoming connection attempt.
            </summary>
            -
            <param name="callback">An <see cref="T:System.AsyncCallback"/> delegate that references the method to invoke when the operation is complete.</param>
            <param name="state">A user-defined object containing information about the accept operation.
            This object is passed to the callback delegate when the operation is complete.</param>
            -
            <returns>An <see cref="T:System.IAsyncResult"/> that references the asynchronous creation of the <see cref="T:System.Net.Sockets.Socket"/>.</returns>
            -
            <exception cref="T:System.ObjectDisposedException">The <see cref="T:System.Net.Sockets.Socket"/> has been closed.</exception>
        </member>
        <member name="M:InTheHand.Net.Sockets.IrDAListener.EndAcceptSocket(System.IAsyncResult)">
            <summary>
            Asynchronously accepts an incoming connection attempt and creates a new <see cref="T:System.Net.Sockets.Socket"/> to handle remote host communication.
            </summary>
            <param name="asyncResult">An <see cref="T:System.IAsyncResult"/> returned by a call to the <see cref="M:InTheHand.Net.Sockets.IrDAListener.BeginAcceptSocket(System.AsyncCallback,System.Object)"/> method.</param>
            <returns>A <see cref="T:System.Net.Sockets.Socket"/>.</returns>
        </member>
        <member name="M:InTheHand.Net.Sockets.IrDAListener.BeginAcceptIrDAClient(System.AsyncCallback,System.Object)">
            <summary>
            Begins an asynchronous operation to accept an incoming connection attempt.
            </summary>
            -
            <param name="callback">An <see cref="T:System.AsyncCallback"/> delegate that references the method to invoke when the operation is complete.</param>
            <param name="state">A user-defined object containing information about the accept operation.
            This object is passed to the callback delegate when the operation is complete.</param>
            -
            <returns>An <see cref="T:System.IAsyncResult"/> that represents the 
            asynchronous accept, which could still be pending.
            </returns>
        </member>
        <member name="M:InTheHand.Net.Sockets.IrDAListener.EndAcceptIrDAClient(System.IAsyncResult)">
            <summary>
            Asynchronously accepts an incoming connection attempt and creates a new <see cref="T:InTheHand.Net.Sockets.IrDAClient"/> to handle remote host communication.
            </summary>
            <param name="asyncResult">An <see cref="T:System.IAsyncResult"/> returned by a call to the <see cref="M:InTheHand.Net.Sockets.IrDAListener.BeginAcceptIrDAClient(System.AsyncCallback,System.Object)"/> method.</param>
            <returns>An <see cref="T:InTheHand.Net.Sockets.IrDAClient"/>.</returns>
        </member>
        <member name="M:InTheHand.Net.Sockets.IrDAListener.Pending">
            <summary>
            Determines if a connection is pending.
            </summary>
            <returns>true if there is a connection pending; otherwise, false.</returns>
        </member>
        <member name="P:InTheHand.Net.Sockets.IrDAListener.Server">
            <summary>
            Gets the underlying network <see cref="T:System.Net.Sockets.Socket"/>.
            </summary>
        </member>
        <member name="P:InTheHand.Net.Sockets.IrDAListener.Active">
            <summary>
            Gets a value that indicates whether the <see cref="T:InTheHand.Net.Sockets.IrDAListener"/> is actively listening for client connections.
            </summary>
        </member>
        <member name="P:InTheHand.Net.Sockets.IrDAListener.LocalEndpoint">
            <summary>
            Gets an <see cref="T:InTheHand.Net.IrDAEndPoint"/> representing the local device.
            </summary>
        </member>
        <member name="T:InTheHand.Net.Sockets.IrDACharacterSet">
            <summary>
            Describes the character sets supported by the device.
            </summary>
            <remarks>The <see cref="T:InTheHand.Net.Sockets.IrDACharacterSet"/> enumeration describes the following character sets, which are used by the <see cref="T:InTheHand.Net.Sockets.IrDAClient"/> and <see cref="T:InTheHand.Net.Sockets.IrDADeviceInfo"/> classes.</remarks>
            <seealso cref="T:InTheHand.Net.Sockets.IrDAClient"/>
        </member>
        <member name="F:InTheHand.Net.Sockets.IrDACharacterSet.ASCII">
            <summary>
            The ASCII character set.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Sockets.IrDACharacterSet.ISO8859Latin1">
            <summary>
            The western European graphic character set.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Sockets.IrDACharacterSet.ISO8859Latin2">
            <summary>
            The eastern European graphic character set.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Sockets.IrDACharacterSet.ISO8859Latin3">
            <summary>
            The southern European graphic character set.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Sockets.IrDACharacterSet.ISO8859Latin4">
            <summary>
            The northern European graphic character set.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Sockets.IrDACharacterSet.ISO8859Cyrillic">
            <summary>
            The Cyrillic graphic character set.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Sockets.IrDACharacterSet.ISO8859Arabic">
            <summary>
            The Arabic graphic character set.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Sockets.IrDACharacterSet.ISO8859Greek">
            <summary>
            The Greek graphic character set.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Sockets.IrDACharacterSet.ISO8859Hebrew">
            <summary>
            The Hebrew graphic character set.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Sockets.IrDACharacterSet.ISO8859Latin5">
            <summary>
            The Turkish graphic character set.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Sockets.IrDACharacterSet.Unicode">
            <summary>
            The Unicode character set.
            </summary>
        </member>
        <member name="T:InTheHand.Net.Bluetooth.LmpFeatures">
            <summary>
            Created from v2.1 specification.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.LmpFeatures.None">
            <summary>
            There are no supported features.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.LmpFeatures.ThreeSlotPackets">
            <summary>
            [0]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.LmpFeatures.ParkState">
            <summary>
            [8]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.LmpFeatures.CvsdSynchronousData">
            <summary>
            [16]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.LmpFeatures.EnhancedDataRateAcl2MbpsMode">
            <summary>
            [25]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.LmpFeatures.EV4Packets">
            <summary>
            [32]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.LmpFeatures.EV5Packets">
            <summary>
            [33]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.LmpFeatures.AfhCapableSlave">
            <summary>
            [35]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.LmpFeatures.AfhClassificationSlave">
            <summary>
            [36]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.LmpFeatures.BrEdrNotSupported">
            <summary>
            [37] v4.0
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.LmpFeatures.LeSupported_Controller">
            <summary>
            [38] v4.0
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.LmpFeatures.ThreeSlotEnhancedDataRateAclPackets">
            <summary>
            [39]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.LmpFeatures.FiveSlotEnhancedDataRateAclPackets">
            <summary>
            [40]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.LmpFeatures.SniffSubrating">
            <summary>
            [41] v2.1
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.LmpFeatures.PauseEncryption">
            <summary>
            [42] v2.1
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.LmpFeatures.ExtendedInquiryResponse">
            <summary>
            [48] v2.1
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.LmpFeatures.SimultaneousLeAndBrEdrToSameDeviceCapable_Controller">
            <summary>
            [49]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.LmpFeatures.SecureSimplePairing">
            <summary>
            [51] v2.1
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.LmpFeatures.EncapsulatedPdu">
            <summary>
            [52] v2.1
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.LmpFeatures.ErroneousDataReporting">
            <summary>
            [53] v2.1
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.LmpFeatures.NonFlushablePacketBoundaryFlag">
            <summary>
            [54] v2.1
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.LmpFeatures.LinkSupervisionTimeoutChangedEvent">
            <summary>
            [56] v2.1
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.LmpFeatures.InquiryTxPowerLevel">
            <summary>
            [57] v2.1
            (Changed name from 'InquiryResponseTxPowerLevel' in v2.1 
            to 'InquiryTxPowerLevel' in v3.0).
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.LmpFeatures.EnhancedPowerControl">
            <summary>
            [58] v3.0
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.LmpFeatures.ExtendedFeatures">
            <summary>
            [63] Present since v2.0 at least.
            </summary>
        </member>
        <member name="T:InTheHand.Net.Bluetooth.BluetoothIoCapability">
            <summary>
            The BLUETOOTH_IO_CAPABILITY enumeration defines the input/output capabilities of a Bluetooth Device.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothIoCapability.DisplayOnly">
            <summary>
            The Bluetooth device is capable of output via display only.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothIoCapability.DisplayYesNo">
            <summary>
            The Bluetooth device is capable of output via a display, 
            and has the additional capability to presenting a yes/no question to the user.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothIoCapability.KeyboardOnly">
            <summary>
            The Bluetooth device is capable of input via keyboard.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothIoCapability.NoInputNoOutput">
            <summary>
            The Bluetooth device is not capable of input/output.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothIoCapability.Undefined">
            <summary>
            The input/output capabilities for the Bluetooth device are undefined.
            </summary>
        </member>
        <member name="T:InTheHand.Net.Bluetooth.AttributeIds.DeviceIdProfileAttributeId">
            <summary>
            Service Attribute IDs defined by the Device Identification Profile specification.
            </summary>
            -
            <remarks>
            <para>&#x201C;This document specifies a method by which Bluetooth devices may
            provide information that may be used by peer Bluetooth devices to
            find representative icons or load associated support software. This
            information is published as Bluetooth SDP records, and optionally in
            an Extended Inquiry Response.&#x201D;
            </para>
            <para>Used in records with Service Class ID:
            <see cref="F:InTheHand.Net.Bluetooth.BluetoothService.PnPInformation"/>.
            </para>
            <para>As well as the attributes defined here, use of some of the universal
            attributes is recommended, they are:
            <see cref="F:InTheHand.Net.Bluetooth.AttributeIds.UniversalAttributeId.ClientExecutableUrl"/>,
            <see cref="F:InTheHand.Net.Bluetooth.AttributeIds.UniversalAttributeId.ServiceDescription"/>,
            and <see cref="F:InTheHand.Net.Bluetooth.AttributeIds.UniversalAttributeId.DocumentationUrl"/>.
            </para>
            </remarks>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.AttributeIds.DeviceIdProfileAttributeId.SpecificationId">
            <summary>
            SpecificationId [0x0200]
            </summary>
            <remarks>The version of the Bluetooth Device ID Profile Specification
            supported by the device.
            e.g. version 1.3 will be value 0x0103. [<c>UInt16</c>]</remarks>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.AttributeIds.DeviceIdProfileAttributeId.VendorId">
            <summary>
            VendorId [0x0201]
            </summary>
            <remarks>
            <para>The id assigned by the organisation in <see cref="F:InTheHand.Net.Bluetooth.AttributeIds.DeviceIdProfileAttributeId.VendorIdSource" />. [<c>UInt16</c>]
            </para>
            <para>&#x201C;The value <c>FFFF</c> is reserved as the default id when
            no Device ID Service Record is present in the device.&#x201D;
            </para>
            </remarks>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.AttributeIds.DeviceIdProfileAttributeId.ProductId">
            <summary>
            ProductId [0x0202]
            </summary>
            <remarks>Distinguishes between different products made by the same vendor. [<c>UInt16</c>]</remarks>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.AttributeIds.DeviceIdProfileAttributeId.Version">
            <summary>
            Version [0x0203]
            </summary>
            <remarks>The version of the product. [<c>UInt16</c>]</remarks>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.AttributeIds.DeviceIdProfileAttributeId.PrimaryRecord">
            <summary>
            PrimaryRecord [0x0204]
            </summary>
            <remarks>If multiple Device ID records are present this indicates the one &#x2019;primary&#x201A; record. [<c>Boolean</c>]</remarks>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.AttributeIds.DeviceIdProfileAttributeId.VendorIdSource">
            <summary>
            VendorIdSource [0x0205]
            </summary>
            <remarks>Designates which organisation assigned the Vendor ID value. [<c>UInt16</c>]
            <list type="table">
            <listheader><term>Value</term><term>Assigning Organisation</term></listheader>
            <item><term>1</term><term>Bluetooth SIG</term></item>
            <item><term>2</term><term>USB Implementors Forum</term></item>
            <item><term>0, 3-FFFF</term><term>reserved</term></item>
            </list>
            </remarks>
        </member>
        <member name="M:InTheHand.Net.AsyncResult`1.SetAsCompletedWithResultOf(System.Func{`0},System.Boolean)">
            <summary>
            Get the results of the operation from the specified function
            and set the operation as completed,
            or if getting the results fails then set the corresponding error
            completion.
            </summary>
            -
            <remarks>
            <para>The pattern that comes to mind when calling
            <see cref="M:SetAsCompleted(TResult,AsyncResultCompletion)"/> is
            the incorrect:
            <code>try {
               var result = SomeStatementsAndFunctionCallsToGetTheResult(...);
               ar.SetAsCompleted(result, false);
            } catch (Exception ex) {
               ar.SetAsCompleted(ex, false);
            }
            </code>
            That is wrong because if the user callback fails with an exception
            then we'll catch it and try to call SetAsCompleted a second time!
            </para>
            <para>We need to instead call SetAsCompleted outside of the try
            block.  This method provides that pattern.
            </para>
            </remarks>
            -
            <param name="getResultsOrThrow">A delegate containing the function
            to call to get the result.
            It should throw an exception in error cases.
            </param>
            <param name="completedSynchronously"></param>
        </member>
        <member name="T:InTheHand.Net.Bluetooth.Manufacturer">
            <summary>
            Manufacturer codes.
            </summary>
            <remarks>Defined in Bluetooth Specifications <see href="https://www.bluetooth.org/Technical/AssignedNumbers/identifiers.htm"/>.</remarks>
        </member>
        <member name="T:InTheHand.Net.Bluetooth.LinkPolicy">
            <summary>
            Flags to describe Link Policy.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.LinkPolicy.Disabled">
            <summary>
            Disables all LAN Manager (LM) modes. 
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.LinkPolicy.MasterSlave">
            <summary>
            Enables the master slave switch.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.LinkPolicy.Hold">
            <summary>
            Enables Hold mode.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.LinkPolicy.Sniff">
            <summary>
            Enables Sniff Mode.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.LinkPolicy.Park">
            <summary>
            Enables Park Mode.
            </summary>
        </member>
        <member name="T:InTheHand.Net.Bluetooth.Widcomm.PORT_EV">
            <summary>
            Define RFCOMM Port events that registered application can receive in the callback
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.Widcomm.PORT_EV.RXCHAR">
            <summary>
            Any Character received
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.Widcomm.PORT_EV.RXFLAG">
            <summary>
            Received certain character
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.Widcomm.PORT_EV.TXEMPTY">
            <summary>
            Transmitt Queue Empty
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.Widcomm.PORT_EV.CTS">
            <summary>
            CTS changed state
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.Widcomm.PORT_EV.DSR">
            <summary>
            DSR changed state
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.Widcomm.PORT_EV.RLSD">
            <summary>
            RLSD changed state
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.Widcomm.PORT_EV.BREAK">
            <summary>
            Ring signal detected
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.Widcomm.PORT_EV.ERR">
            <summary>
            Line status error occurred
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.Widcomm.PORT_EV.RING">
            <summary>
            Ring signal detected
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.Widcomm.PORT_EV.CTSS">
            <summary>
            CTS state
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.Widcomm.PORT_EV.DSRS">
            <summary>
            DSR state
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.Widcomm.PORT_EV.RLSDS">
            <summary>
            RLSD state
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.Widcomm.PORT_EV.OVERRUN">
            <summary>
            receiver buffer overrun
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.Widcomm.PORT_EV.TXCHAR">
            <summary>
            Any character transmitted
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.Widcomm.PORT_EV.CONNECTED">
            <summary>
            RFCOMM connection established
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.Widcomm.PORT_EV.CONNECT_ERR">
            <summary>
            Was not able to establish connection; or disconnected
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.Widcomm.PORT_EV.FC">
            <summary>
            flow control enabled flag changed by remote
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.Widcomm.PORT_EV.FCS">
            <summary>
            flow control status true = enabled
            </summary>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.Msft.SocketBluetoothClient.InTheHand#Net#Bluetooth#Factory#IBluetoothClient#DiscoverDevices(System.Int32,System.Boolean,System.Boolean,System.Boolean,System.Boolean)">
            <summary>
            Discovers accessible Bluetooth devices and returns their names and addresses.
            </summary>
            <param name="maxDevices">The maximum number of devices to get information about.</param>
            <param name="authenticated">True to return previously authenticated/paired devices.</param>
            <param name="remembered">True to return remembered devices.</param>
            <param name="unknown">True to return previously unknown devices.</param>
            <param name="discoverableOnly">True to return only discoverable devices
            (where both in range and in discoverable mode).
            When <see langword="true"/> all other flags are ignored.
            <strong>Note: Does NOT work on Win32 with the Microsoft stack.</strong>
            </param>
            <returns>An array of BluetoothDeviceInfo objects describing the devices discovered.</returns>
            -
            <remarks>
            <para>The <see paramref="discoverableOnly"/> flag will discover only 
            the devices that are in range and are in discoverable mode.  This works 
            only on WM/CE with the Microsoft stack, or on any platform with the 
            Widcomm stack.
            </para>
            <para>
            It does not work on desktop Windows with the Microsoft 
            stack, where the in range and remembered devices are returned already 
            merged!  There simple all devices will be returned.  Even the 
            <see cref="P:InTheHand.Net.Sockets.BluetoothDeviceInfo.LastSeen">BluetoothDeviceInfo.LastSeen</see>
            property is of no use there: on XP and Vista at least the value provided 
            is always simply the current time.
            </para>
            </remarks>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.Msft.SocketBluetoothClient.Connect(InTheHand.Net.BluetoothEndPoint)">
            <summary>
            Connects a client to a specified endpoint.
            </summary>
            <param name="remoteEP">A <see cref="T:InTheHand.Net.BluetoothEndPoint"/> that represents the remote device.</param>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.Msft.SocketBluetoothClient.BeginConnect(InTheHand.Net.BluetoothEndPoint,System.AsyncCallback,System.Object)">
            <summary>
            Begins an asynchronous request for a remote host connection.
            The remote host is specified by a <see cref="T:InTheHand.Net.BluetoothEndPoint"/>. 
            </summary>
            <param name="remoteEP">A <see cref="T:InTheHand.Net.BluetoothEndPoint"/> containing the 
            address and UUID of the remote service.</param>
            <param name="requestCallback">An AsyncCallback delegate that references the method to invoke when the operation is complete.</param>
            <param name="state">A user-defined object that contains information about the connect operation.
            This object is passed to the requestCallback delegate when the operation is complete.</param>
            <returns></returns>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.Msft.SocketBluetoothClient.EndConnect(System.IAsyncResult)">
            <summary>
            Asynchronously accepts an incoming connection attempt.
            </summary>
            <param name="asyncResult">An <see cref="T:System.IAsyncResult"/> object returned by a call to 
            <see cref="M:BeginConnect(InTheHand.Net.Sockets.BluetoothEndPoint,System.AsyncCallback,System.Object)"/>
            / <see cref="M:BeginConnect(InTheHand.Net.Sockets.BluetoothAddress,System.Guid,System.AsyncCallback,System.Object)"/>.
            </param>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.Msft.SocketBluetoothClient.SetPin(System.String)">
            <summary>
            Sets the PIN associated with the currently connected device.
            </summary>
            <param name="pin">PIN which must be composed of 1 to 16 ASCII characters.</param>
            <remarks>Assigning null (Nothing in VB) or an empty String will revoke the PIN.</remarks>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.Msft.SocketBluetoothClient.SetPin(InTheHand.Net.BluetoothAddress,System.String)">
            <summary>
            Set or change the PIN to be used with a specific remote device.
            </summary>
            <param name="device">Address of Bluetooth device.</param>
            <param name="pin">PIN string consisting of 1 to 16 ASCII characters.</param>
            <remarks>Assigning null (Nothing in VB) or an empty String will revoke the PIN.</remarks>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.Msft.SocketBluetoothClient.GetRemoteMachineName(InTheHand.Net.BluetoothAddress)">
            <summary>
            Gets the name of the specified remote device.
            </summary>
            <param name="a">Address of remote device.</param>
            <returns>Friendly name of specified device.</returns>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.Msft.SocketBluetoothClient.GetRemoteMachineName(System.Net.Sockets.Socket)">
            <summary>
            Gets the name of a device by a specified socket.
            </summary>
            <param name="s"> A <see cref="T:System.Net.Sockets.Socket"/>.</param>
            <returns>Returns a string value of the computer or device name.</returns>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.Msft.SocketBluetoothClient.Dispose(System.Boolean)">
            <summary>
            Releases the unmanaged resources used by the BluetoothClient and optionally releases the managed resources.
            </summary>
            <param name="disposing">true to release both managed and unmanaged resources; false to release only unmanaged resources.</param>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.Msft.SocketBluetoothClient.Dispose">
            <summary>
            Closes the <see cref="T:InTheHand.Net.Sockets.BluetoothClient"/> and the underlying connection.
            </summary>
            -
            <seealso cref="M:InTheHand.Net.Sockets.BluetoothClient.Close"/>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.Msft.SocketBluetoothClient.Finalize">
            <summary>
            Frees resources used by the <see cref="T:InTheHand.Net.Sockets.BluetoothClient"/> class.
            </summary>
        </member>
        <member name="P:InTheHand.Net.Bluetooth.Msft.SocketBluetoothClient.InquiryLength">
            <summary>
            Amount of time allowed to perform the query.
            </summary>
            <remarks>On Windows CE the actual value used is expressed in units of 1.28 seconds, so will be the nearest match for the value supplied.
            The default value is 10 seconds. The maximum is 60 seconds.</remarks>
        </member>
        <member name="P:InTheHand.Net.Bluetooth.Msft.SocketBluetoothClient.Active">
            <summary>
            Gets or set a value that indicates whether a connection has been made.
            </summary>
        </member>
        <member name="P:InTheHand.Net.Bluetooth.Msft.SocketBluetoothClient.Authenticate">
            <summary>
            Gets or sets the authentication state of the current connect or behaviour to use when connection is established.
            </summary>
            <remarks>
            For disconnected sockets, specifies that authentication is required in order for a connect or accept operation to complete successfully.
            Setting this option actively initiates authentication during connection establishment, if the two Bluetooth devices were not previously authenticated.
            The user interface for passkey exchange, if necessary, is provided by the operating system outside the application context.
            For outgoing connections that require authentication, the connect operation fails with WSAEACCES if authentication is not successful.
            In response, the application may prompt the user to authenticate the two Bluetooth devices before connection.
            For incoming connections, the connection is rejected if authentication cannot be established and returns a WSAEHOSTDOWN error.
            </remarks>
        </member>
        <member name="P:InTheHand.Net.Bluetooth.Msft.SocketBluetoothClient.Encrypt">
            <summary>
            On unconnected sockets, enforces encryption to establish a connection.
            Encryption is only available for authenticated connections.
            For incoming connections, a connection for which encryption cannot be established is automatically rejected and returns WSAEHOSTDOWN as the error.
            For outgoing connections, the connect function fails with WSAEACCES if encryption cannot be established.
            In response, the application may prompt the user to authenticate the two Bluetooth devices before connection.
            </summary>
        </member>
        <member name="P:InTheHand.Net.Bluetooth.Msft.SocketBluetoothClient.LinkKey">
            <summary>
            Returns link key associated with peer Bluetooth device.
            </summary>
        </member>
        <member name="P:InTheHand.Net.Bluetooth.Msft.SocketBluetoothClient.LinkPolicy">
            <summary>
            Returns the Link Policy of the current connection.
            </summary>
        </member>
        <member name="P:InTheHand.Net.Bluetooth.Msft.SocketBluetoothClient.RemoteMachineName">
            <summary>
            Gets the name of the remote device.
            </summary>
        </member>
        <member name="T:InTheHand.Net.Bluetooth.Factory.DiscoDevsParams">
            <exclude/>
        </member>
        <member name="P:InTheHand.Net.Bluetooth.Msft.SocketBluetoothClient.MsftSocketOptionHelper.Authenticate">
            <summary>
            Gets or sets the authentication state of the current connect or behaviour to use when connection is established.
            </summary>
            <remarks>
            For disconnected sockets, specifies that authentication is required in order for a connect or accept operation to complete successfully.
            Setting this option actively initiates authentication during connection establishment, if the two Bluetooth devices were not previously authenticated.
            The user interface for passkey exchange, if necessary, is provided by the operating system outside the application context.
            For outgoing connections that require authentication, the connect operation fails with WSAEACCES if authentication is not successful.
            In response, the application may prompt the user to authenticate the two Bluetooth devices before connection.
            For incoming connections, the connection is rejected if authentication cannot be established and returns a WSAEHOSTDOWN error.
            </remarks>
        </member>
        <member name="P:InTheHand.Net.Bluetooth.Msft.SocketBluetoothClient.MsftSocketOptionHelper.Encrypt">
            <summary>
            On unconnected sockets, enforces encryption to establish a connection.
            Encryption is only available for authenticated connections.
            For incoming connections, a connection for which encryption cannot be established is automatically rejected and returns WSAEHOSTDOWN as the error.
            For outgoing connections, the connect function fails with WSAEACCES if encryption cannot be established.
            In response, the application may prompt the user to authenticate the two Bluetooth devices before connection.
            </summary>
        </member>
        <member name="T:InTheHand.Net.Bluetooth.Factory.IBluetoothFactoryFactory">
            <exclude/>
            <summary>
            Defines a class that provides Bluetooth Factory initialisation but returns
            multiple factories.
            </summary>
            -
            <remarks>
            <para>In most cases configuration is provided so that
            <see cref="T:InTheHand.Net.Bluetooth.BluetoothFactory"/> loads one or more
            classes each derived from <see cref="T:InTheHand.Net.Bluetooth.BluetoothFactory"/>.
            There the instance is the factory.  This interface allows a class to be 
            loaded by <see cref="T:InTheHand.Net.Bluetooth.BluetoothFactory"/> but 
            instead <strong>returns</strong> a list of factory instances.
            </para>
            </remarks>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.Factory.IBluetoothFactoryFactory.GetFactories(System.Collections.Generic.IList{System.Exception})">
            <summary>
            Get the list of factories.
            </summary>
            <param name="errors">A list of exceptions, to which any errors in 
            attempting to create the factories are added.
            </param>
            <returns>A list of successfully created factories.
            </returns>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BlueSoleil.StackConsts.DiscoveryMode.BTSDK_GENERAL_DISCOVERABLE">
            <summary>
            &#x201C;Sets the device into general discoverable mode. This is
            the default discoverable mode.&#x201D;
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BlueSoleil.StackConsts.DiscoveryMode.BTSDK_LIMITED_DISCOVERABLE">
            <summary>
            &#x201C;Sets the device into limited discoverable mode. If this
            value is specified, BTSDK_GENERAL_DISCOVERABLE
            mode value is ignored by BlueSoleil.&#x201D;
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BlueSoleil.StackConsts.DiscoveryMode.BTSDK_DISCOVERABLE">
            <summary>
            &#x201C;Makes the device discoverable. This is equivalent to
            BTSDK_GENERAL_DISCOVERABLE.&#x201D;
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BlueSoleil.StackConsts.DiscoveryMode.BTSDK_CONNECTABLE">
            <summary>
            &#x201C;Makes the device connectable. This is the default
            connectable mode.&#x201D;
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BlueSoleil.StackConsts.DiscoveryMode.BTSDK_PAIRABLE">
            <summary>
            &#x201C;Makes the device pairable. This is the default pairable
            mode.&#x201D;
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BlueSoleil.StackConsts.ConnectionEventType.CONN_IND">
            <summary>
            &#x201C;A remote device connects to a local service record.&#x201D;
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BlueSoleil.StackConsts.ConnectionEventType.DISC_IND">
            <summary>
            &#x201C;The remote device disconnects the connection, or the
            connection is lost due to radio communication problems,
            e.g. the remote device is out of communication range.&#x201D;
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BlueSoleil.StackConsts.ConnectionEventType.CONN_CFM">
            <summary>
            &#x201C;A local device connects to a remote service record.&#x201D;
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BlueSoleil.StackConsts.ConnectionEventType.DISC_CFM">
            <summary>
            &#x201C;The local device disconnects the connection from remote
            service.&#x201D;
            </summary>
        </member>
        <member name="T:InTheHand.Net.Bluetooth.BlueSoleil.StackConsts.AttributeLookup">
            <summary>
            "Possible flags for member 'mask' in _BtSdkRemoteServiceAttrStru"
            </summary>
        </member>
        <member name="M:InTheHand.Runtime.InteropServices.Marshal32.ReadIntPtr(System.IntPtr,System.Int32)">
            <summary>
            NETCF doesn't have <see cref="M:System.Runtime.InteropServices.Marshal.ReadIntPtr(System.IntPtr,System.Int32)"/>
            </summary>
        </member>
        <member name="T:InTheHand.ObexUri">
            <summary>
            Contains <see cref="T:System.Uri"/> helper functionality.
            </summary>
        </member>
        <member name="F:InTheHand.ObexUri.UriSchemeObex">
            <summary>
            Specifies that the URI is accessed through the Object Exchange (OBEX) protocol.
            </summary>
        </member>
        <member name="F:InTheHand.ObexUri.UriSchemeObexPush">
            <summary>
            Specifies that the URI is accessed through the Object Exchange (OBEX) Push protocol.
            </summary>
        </member>
        <member name="F:InTheHand.ObexUri.UriSchemeObexFtp">
            <summary>
            Specifies that the URI is accessed through the Object Exchange (OBEX) FTP protocol.
            </summary>
        </member>
        <member name="F:InTheHand.ObexUri.UriSchemeObexSync">
            <summary>
            Specifies that the URI is accessed through the Object Exchange (OBEX) Sync protocol.
            </summary>
        </member>
        <member name="M:InTheHand.Net.ExceptionExtension.ToStringNoStackTrace(System.Exception)">
            <summary>
            Get the normal first line of <c>Exception.ToString()</c>,
            that is without the stack trace lines.
            </summary>
            -
            <remarks>
            Get the normal first line of <c>Exception.ToString()</c>,
            that is including details of all inner exceptions,
            but without the stack trace lines.
            e.g. <c>System.IO.IOException: An established connection was aborted by the software in your host machine. ---> System.Net.Sockets.SocketException: An established connection was aborted by the software in your host machine.</c>
            </remarks>
            -
            <param name="this">The exception.
            </param>
            -
            <returns>A string containing the first line of the <c>Exception.ToString()</c>.
            </returns>
        </member>
        <member name="M:InTheHand.Net.ExceptionFactory.ArgumentOutOfRangeException(System.String,System.String)">
            <exclude/>
        </member>
        <member name="M:InTheHand.Net.StringUtilities.IsNullOrEmpty(System.String)">
            <exclude/>
        </member>
        <member name="T:InTheHand.Net.Sockets.IrDADeviceInfo">
            <summary>
            Provides information about remote devices connected by infrared communications.
            </summary>
            <seealso cref="T:System.Net.Sockets.IrDADeviceInfo"/>
        </member>
        <member name="M:InTheHand.Net.Sockets.IrDADeviceInfo.Equals(System.Object)">
            <summary>
            Compares two <see cref="T:InTheHand.Net.Sockets.IrDADeviceInfo"/> instances for equality.
            </summary>
            -
            <param name="obj">The <see cref="T:InTheHand.Net.Sockets.BluetoothDeviceInfo"/>
            to compare with the current instance.
            </param>
            -
            <returns><c>true</c> if <paramref name="obj"/>
            is a <see cref="T:InTheHand.Net.Sockets.BluetoothDeviceInfo"/> and equal to the current instance;
            otherwise, <c>false</c>.
            </returns>
        </member>
        <member name="M:InTheHand.Net.Sockets.IrDADeviceInfo.GetHashCode">
            <summary>
            Returns the hash code for this instance.
            </summary>
            <returns>A hash code for the current object.</returns>
        </member>
        <member name="P:InTheHand.Net.Sockets.IrDADeviceInfo.DeviceAddress">
            <summary>
            Returns the address of the remote device.
            </summary>
        </member>
        <member name="P:InTheHand.Net.Sockets.IrDADeviceInfo.DeviceID">
            <summary>
            Provided solely for compatibility with System.Net.IrDA - consider using <see cref="P:InTheHand.Net.Sockets.IrDADeviceInfo.DeviceAddress"/> instead.
            </summary>
        </member>
        <member name="P:InTheHand.Net.Sockets.IrDADeviceInfo.DeviceName">
            <summary>
            Gets the name of the device.
            </summary>
        </member>
        <member name="P:InTheHand.Net.Sockets.IrDADeviceInfo.CharacterSet">
            <summary>
            Gets the character set used by the server, such as ASCII.
            </summary>
        </member>
        <member name="P:InTheHand.Net.Sockets.IrDADeviceInfo.Hints">
            <summary>
            Gets the type of the device, such as a computer.
            </summary>
        </member>
        <member name="T:InTheHand.Net.Sockets.BluetoothClient">
            <summary>
            Provides client connections for Bluetooth RFCOMM network services.
            </summary>
            <remarks>
            <note>This class currently only supports devices which use the Microsoft 
            and Widcomm Bluetooth stacks, devices which use the other stacks will 
            not work.
            </note>
            <!--This para is in both the class remarks and in Connect(BtEndPoint)-->
            <para>When connecting
            normally an endpoint with an Address and a Service Class Id 
            is specified, then the system will automatically lookup the SDP 
            record on the remote device for that service class and connect to 
            the port number (RFCOMM Channel Number) specified there.
            If instead a port value is provided in the endpoint then the SDP 
            lookup will be skipped and  the system will connect to the specified 
            port directly.
            </para>
            <para>Note: Do not attempt to connect with service
            <see cref="F:InTheHand.Net.Bluetooth.BluetoothService.RFCommProtocol">BluetoothService.RFCommProtocol</see>
            this class always uses RFCOMM, instead the Service Class Id of the 
            particular service to which you want to connect must be specified,
            perhaps
            <see cref="F:InTheHand.Net.Bluetooth.BluetoothService.SerialPort">BluetoothService.SerialPort</see>,
            <see cref="F:InTheHand.Net.Bluetooth.BluetoothService.ObexObjectPush">BluetoothService.ObexObjectPush</see>,
            or the unique UUID/<see cref="T:System.Guid"/> that you are using in
            your custom server application.
            </para>
            </remarks>
        </member>
        <member name="M:InTheHand.Net.Sockets.BluetoothClient.#ctor">
            <summary>
            Creates a new instance of <see cref="T:InTheHand.Net.Sockets.BluetoothClient"/>.
            </summary>
        </member>
        <member name="M:InTheHand.Net.Sockets.BluetoothClient.#ctor(InTheHand.Net.BluetoothEndPoint)">
            <summary>
            Initializes a new instance of the <see cref="T:InTheHand.Net.Sockets.BluetoothClient"/> class and binds it to the specified local endpoint.
            </summary>
            <param name="localEP">The <see cref="T:InTheHand.Net.BluetoothEndPoint"/> to which you bind the Bluetooth Socket.
            Only necessary on multi-radio system where you want to select the local radio to use.</param>
        </member>
        <member name="M:InTheHand.Net.Sockets.BluetoothClient.DiscoverDevices">
            <summary>
            Discovers accessible Bluetooth devices, both remembered and in-range,
            and returns their names and addresses.
            </summary>
            -
            <remarks>
            <para>This is equivalent to calling
            <see cref="M:InTheHand.Net.Sockets.BluetoothClient.DiscoverDevices(System.Int32,System.Boolean,System.Boolean,System.Boolean,System.Boolean)"
            />(255, true, true, true)
            </para>
            </remarks>
            -
            <returns>An array of BluetoothDeviceInfo objects describing the devices discovered.</returns>
        </member>
        <member name="M:InTheHand.Net.Sockets.BluetoothClient.DiscoverDevices(System.Int32)">
            <summary>
            Discovers accessible Bluetooth devices, both remembered and in-range,
            and returns their names and addresses.
            </summary>
            -
            <remarks>
            <para>This is equivalent to calling
            <see cref="M:InTheHand.Net.Sockets.BluetoothClient.DiscoverDevices(System.Int32,System.Boolean,System.Boolean,System.Boolean,System.Boolean)"
            />(maxDevices, true, true, true)
            </para>
            </remarks>
            -
            <param name="maxDevices">The number of in-range devices to find before the inquiry may be stopped early.
            The result can contain more than this number of devices.
            </param>
            -
            <returns>An array of BluetoothDeviceInfo objects describing the devices discovered.</returns>
        </member>
        <member name="M:InTheHand.Net.Sockets.BluetoothClient.DiscoverDevices(System.Int32,System.Boolean,System.Boolean,System.Boolean)">
            <summary>
            Discovers accessible Bluetooth devices, optionally remembered and in-range,
            and returns their names and addresses.
            </summary>
            -
            <param name="maxDevices">The number of in-range devices to find before the inquiry may be stopped early.
            The result can contain more than this number of devices.
            </param>
            <param name="authenticated">True to return previously authenticated/paired devices.</param>
            <param name="remembered">True to return remembered devices.</param>
            <param name="unknown">True to return previously unknown devices.</param>
            -
            <returns>An array of BluetoothDeviceInfo objects describing the devices discovered.</returns>
        </member>
        <member name="M:InTheHand.Net.Sockets.BluetoothClient.DiscoverDevices(System.Int32,System.Boolean,System.Boolean,System.Boolean,System.Boolean)">
            <summary>
            Discovers accessible Bluetooth devices, optionally remembered and in-range or just in-range,
            and returns their names and addresses.
            </summary>
            -
            <remarks>
            <para>The <paramref name="discoverableOnly"/> parameter is not supported 
            on the Microsoft stack on WinXP as the stack there returns the remembered and Device-Inquiry-results already 
            merged, it is however supported on Windows 7.
            It is supported on WM/CE and on Widcomm (both platforms).
            Note when that flag is set the other related flag values are ignored.
            </para>
            <para>To remove devices from the list of remembered/authenticated
            devices use <see cref="M:InTheHand.Net.Bluetooth.BluetoothSecurity.RemoveDevice(InTheHand.Net.BluetoothAddress)">BluetoothSecurity.RemoveDevice</see>
            </para>
            </remarks>
            -
            <param name="maxDevices">The number of in-range devices to find before the inquiry may be stopped early.
            The result can contain more than this number of devices.
            </param>
            <param name="authenticated">True to return previously authenticated/paired devices.</param>
            <param name="remembered">True to return remembered devices.</param>
            <param name="unknown">True to return previously unknown devices.</param>
            <param name="discoverableOnly">True to return only the devices that 
            are in range, and in discoverable mode.  See the remarks section.</param>
            -
            <returns>An array of BluetoothDeviceInfo objects describing the devices discovered.</returns>
        </member>
        <member name="M:InTheHand.Net.Sockets.BluetoothClient.DiscoverDevicesInRange">
            <summary>
            Discovers Bluetooth devices that are in range and are in &#x2018;discoverable mode&#x2019;
            </summary>
            -
            <remarks>
            <para>This is equivalent to calling
            <see cref="M:InTheHand.Net.Sockets.BluetoothClient.DiscoverDevices(System.Int32,System.Boolean,System.Boolean,System.Boolean,System.Boolean)"
            />(255, false, false, false, true)
            </para>
            </remarks>
            -
            <returns>An array of BluetoothDeviceInfo objects describing the devices discovered.</returns>
        </member>
        <member name="M:InTheHand.Net.Sockets.BluetoothClient.BeginDiscoverDevices(System.Int32,System.Boolean,System.Boolean,System.Boolean,System.Boolean,System.AsyncCallback,System.Object)">
            <summary>
            An asynchronous version of <see cref="M:InTheHand.Net.Sockets.BluetoothClient.DiscoverDevices(System.Int32,System.Boolean,System.Boolean,System.Boolean,System.Boolean)"/>
            </summary>
            -
            <param name="maxDevices">See <see cref="M:InTheHand.Net.Sockets.BluetoothClient.DiscoverDevices(System.Int32,System.Boolean,System.Boolean,System.Boolean,System.Boolean)"/>.
            </param>
            <param name="authenticated">See <see cref="M:InTheHand.Net.Sockets.BluetoothClient.DiscoverDevices(System.Int32,System.Boolean,System.Boolean,System.Boolean,System.Boolean)"/>.
            </param>
            <param name="remembered">See <see cref="M:InTheHand.Net.Sockets.BluetoothClient.DiscoverDevices(System.Int32,System.Boolean,System.Boolean,System.Boolean,System.Boolean)"/>.
            </param>
            <param name="unknown">See <see cref="M:InTheHand.Net.Sockets.BluetoothClient.DiscoverDevices(System.Int32,System.Boolean,System.Boolean,System.Boolean,System.Boolean)"/>.
            </param>
            <param name="discoverableOnly">See <see cref="M:InTheHand.Net.Sockets.BluetoothClient.DiscoverDevices(System.Int32,System.Boolean,System.Boolean,System.Boolean,System.Boolean)"/>.
            </param>
            <param name="callback">An optional asynchronous callback, to be called 
            when the discovery is complete.
            </param>
            <param name="state">A user-provided object that distinguishes this 
            particular asynchronous discovery request from other requests.
            </param>
            -
            <returns>An <see cref="T:System.IAsyncResult"/> that represents the 
            asynchronous discovery, which could still be pending.
            </returns>
        </member>
        <member name="M:InTheHand.Net.Sockets.BluetoothClient.EndDiscoverDevices(System.IAsyncResult)">
            <summary>
            Ends an asynchronous Service Record lookup query.
            </summary>
            -
            <param name="asyncResult">An <see cref="T:System.IAsyncResult"/> returned
            by <see cref="M:InTheHand.Net.Sockets.BluetoothClient.BeginDiscoverDevices(System.Int32,System.Boolean,System.Boolean,System.Boolean,System.Boolean,System.AsyncCallback,System.Object)"/>.
            </param>
            -
            <returns>See <see cref="M:InTheHand.Net.Sockets.BluetoothClient.DiscoverDevices(System.Int32,System.Boolean,System.Boolean,System.Boolean,System.Boolean)"/>.
            </returns>
        </member>
        <member name="M:InTheHand.Net.Sockets.BluetoothClient.Connect(InTheHand.Net.BluetoothEndPoint)">
            <summary>
            Connects a client to a specified endpoint.
            </summary>
            -
            <param name="remoteEP">A <see cref="T:InTheHand.Net.BluetoothEndPoint"/> that represents the server on the remote device.</param>
            -
            <remarks>
            <!--This para is in both the class remarks and in Connect(BtEndPoint)-->
            <para>Normally an endpoint with an Address and a Service Class Id 
            is specified, then the system will automatically lookup the SDP 
            record on the remote device for that service class and connect to 
            the port number (RFCOMM Channel Number) specified there.
            If instead a port value is provided in the endpoint then the SDP 
            lookup will be skipped and  the system will connect to the specified 
            port directly.
            </para>
            <para>Note: Do not attempt to connect with service
            <see cref="F:InTheHand.Net.Bluetooth.BluetoothService.RFCommProtocol">BluetoothService.RFCommProtocol</see>.
            See the <see cref="T:InTheHand.Net.Sockets.BluetoothClient">class</see> remarks for more information.
            </para> 
            </remarks>
        </member>
        <member name="M:InTheHand.Net.Sockets.BluetoothClient.Connect(InTheHand.Net.BluetoothAddress,System.Guid)">
            <summary>
            Connects the client to a remote Bluetooth host using the specified Bluetooth address and service identifier. 
            </summary>
            -
            <remarks>
            <!--This para is in both the class remarks and in Connect(BtEndPoint)-->
            <para>The system will automatically lookup the SDP 
            record on the remote device for that service class and connect to 
            the port number (RFCOMM Channel Number) specified there.
            </para>
            <para>Note: Do not attempt to connect with service
            <see cref="F:InTheHand.Net.Bluetooth.BluetoothService.RFCommProtocol">BluetoothService.RFCommProtocol</see>.
            See the <see cref="T:InTheHand.Net.Sockets.BluetoothClient">class</see> remarks for more information.
            </para> 
            </remarks>
            -
            <param name="address">The <see cref="T:InTheHand.Net.BluetoothAddress"/> of the remote host.
            </param>
            <param name="service">The Service Class Id of the service on the remote host.
            The standard Bluetooth Service Classes are provided on class 
            <see cref="T:InTheHand.Net.Bluetooth.BluetoothService"/>.
            </param>
        </member>
        <member name="M:InTheHand.Net.Sockets.BluetoothClient.BeginConnect(InTheHand.Net.BluetoothAddress,System.Guid,System.AsyncCallback,System.Object)">
            <summary>
            Begins an asynchronous request for a remote host connection.
            The remote host is specified by a <see cref="T:InTheHand.Net.BluetoothAddress"/> and a service identifier (Guid). 
            </summary>
            -
            <remarks>
            <para>See the <see cref="M:InTheHand.Net.Sockets.BluetoothClient.Connect(InTheHand.Net.BluetoothAddress,System.Guid)"/>
            method for information on the usage of the values in the endpoint.
            </para>
            </remarks>
            -
            <param name="address">The <see cref="T:InTheHand.Net.BluetoothAddress"/> of the remote host.
            </param>
            <param name="service">The Service Class Id of the service on the remote host.
            The standard Bluetooth Service Classes are provided on class 
            <see cref="T:InTheHand.Net.Bluetooth.BluetoothService"/>
            </param>
            <param name="requestCallback">An <see cref="T:System.AsyncCallback"/> delegate that 
            references the method to invoke when the operation is complete.
            </param>
            <param name="state">A user-defined object that contains information 
            about the connect operation. This object is passed to the <paramref name="requestCallback"/> 
            delegate when the operation is complete.
            </param>
            -
            <returns>An <see cref="T:System.IAsyncResult"/> that represents the 
            asynchronous connect, which could still be pending.
            </returns>
        </member>
        <member name="M:InTheHand.Net.Sockets.BluetoothClient.BeginConnect(InTheHand.Net.BluetoothEndPoint,System.AsyncCallback,System.Object)">
            <summary>
            Begins an asynchronous request for a remote host connection.
            The remote server is specified by a <see cref="T:InTheHand.Net.BluetoothEndPoint"/>. 
            </summary>
            -
            <param name="remoteEP">A <see cref="T:InTheHand.Net.BluetoothEndPoint"/> that 
            represents the server on the remote device.
            See the <see cref="M:InTheHand.Net.Sockets.BluetoothClient.Connect(InTheHand.Net.BluetoothEndPoint)"/>
            method for information on the usage of the values in the endpoint.
            </param>
            <param name="requestCallback">An <see cref="T:System.AsyncCallback"/> delegate that 
            references the method to invoke when the operation is complete.
            </param>
            <param name="state">A user-defined object that contains information 
            about the connect operation. This object is passed to the <paramref name="requestCallback"/> 
            delegate when the operation is complete.
            </param>
            -
            <remarks>
            <para>See the <see cref="M:InTheHand.Net.Sockets.BluetoothClient.Connect(InTheHand.Net.BluetoothEndPoint)"/>
            method for information on the usage of the values in the endpoint.
            </para>
            </remarks>
            -
            <returns>An <see cref="T:System.IAsyncResult"/> that represents the 
            asynchronous connect, which could still be pending.
            </returns>
        </member>
        <member name="M:InTheHand.Net.Sockets.BluetoothClient.EndConnect(System.IAsyncResult)">
            <summary>
            Asynchronously accepts an incoming connection attempt.
            </summary>
            <param name="asyncResult">An <see cref="T:System.IAsyncResult"/> object returned by a call to 
            <see cref="M:InTheHand.Net.Sockets.BluetoothClient.BeginConnect(InTheHand.Net.BluetoothEndPoint,System.AsyncCallback,System.Object)"/>
            / <see cref="M:InTheHand.Net.Sockets.BluetoothClient.BeginConnect(InTheHand.Net.BluetoothAddress,System.Guid,System.AsyncCallback,System.Object)"/>.
            </param>
        </member>
        <member name="M:InTheHand.Net.Sockets.BluetoothClient.Close">
            <summary>
            Closes the <see cref="T:InTheHand.Net.Sockets.BluetoothClient"/> and the underlying connection.
            </summary>
            -
            <remarks>The two XxxxxClient classes produced by Microsoft (TcpClient, 
            and IrDAClient in the NETCF) have had various documented behaviours and various
            actual behaviours for close/dispose/finalize on the various platforms. :-(
            The current TcpClient implementation on is that 
            Close/Dispose closes the connection by closing the underlying socket and/or
            NetworkStream, and finalization doesn't close either.  This is the behaviour
            we use for the here (for <see cref="T:InTheHand.Net.Sockets.BluetoothClient"/>,
            <see cref="T:InTheHand.Net.Sockets.IrDAClient"/>).  (The documentation in MSDN for 
            <see cref="T:System.Net.Sockets.TcpClient"/> is still wrong by-the-way,
            see <see href="https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=158480">
            Microsoft feedback #158480</see>).
            </remarks>
        </member>
        <member name="M:InTheHand.Net.Sockets.BluetoothClient.GetStream">
            <summary>
            Gets the underlying stream of data.
            </summary>
            <returns>The underlying <see cref="T:System.Net.Sockets.NetworkStream"/>.</returns>
            <remarks><see cref="M:InTheHand.Net.Sockets.BluetoothClient.GetStream"/> returns a <see cref="T:System.Net.Sockets.NetworkStream"/> that you can use to send and receive data.
            The <see cref="T:System.Net.Sockets.NetworkStream"/> class inherits from the <see cref="T:System.IO.Stream"/> class, which provides a rich collection of methods and properties used to facilitate network communications.
            <para>You must call the <see cref="M:InTheHand.Net.Sockets.BluetoothClient.Connect(InTheHand.Net.BluetoothEndPoint)"/> / <see cref="M:InTheHand.Net.Sockets.BluetoothClient.Connect(InTheHand.Net.BluetoothAddress,System.Guid)"/>
            method first, or the <see cref="M:InTheHand.Net.Sockets.BluetoothClient.GetStream"/> method will throw an <see cref="T:System.InvalidOperationException"/>.
            After you have obtained the <see cref="T:System.Net.Sockets.NetworkStream"/>, call the <see cref="M:System.Net.Sockets.NetworkStream.Write(System.Byte[],System.Int32,System.Int32)"/> method to send data to the remote host.
            Call the <see cref="M:System.Net.Sockets.NetworkStream.Read(System.Byte[],System.Int32,System.Int32)"/> method to receive data arriving from the remote host.
            Both of these methods block until the specified operation is performed.
            You can avoid blocking on a read operation by checking the <see cref="P:System.Net.Sockets.NetworkStream.DataAvailable"/> property.
            A true value means that data has arrived from the remote host and is available for reading.
            In this case, <see cref="M:System.Net.Sockets.NetworkStream.Read(System.Byte[],System.Int32,System.Int32)"/> is guaranteed to complete immediately.
            If the remote host has shutdown its connection, <see cref="M:System.Net.Sockets.NetworkStream.Read(System.Byte[],System.Int32,System.Int32)"/> will immediately return with zero bytes.</para></remarks>
            <exception cref="T:System.InvalidOperationException">The <see cref="T:InTheHand.Net.Sockets.BluetoothClient"/> is not connected to a remote host.</exception>
            <exception cref="T:System.ObjectDisposedException">The <see cref="T:InTheHand.Net.Sockets.BluetoothClient"/> has been closed.</exception>
        </member>
        <member name="M:InTheHand.Net.Sockets.BluetoothClient.SetPin(System.String)">
            <summary>
            Sets the PIN associated with the remote device.
            </summary>
            <param name="pin">PIN which must be composed of 1 to 16 ASCII characters.</param>
            <remarks>
            <para>Is not supported on all platforms.
            For instance see the Widcomm documentation 
            </para>
            <para>Assigning null (Nothing in VB) or an empty String will revoke the PIN.
            </para>
            <para>In version 2.3 could only be called when connected.
            </para>
            </remarks>
        </member>
        <member name="M:InTheHand.Net.Sockets.BluetoothClient.SetPin(InTheHand.Net.BluetoothAddress,System.String)">
            <summary>
            Set or change the PIN to be used with a specific remote device.
            </summary>
            <param name="device">Address of Bluetooth device.</param>
            <param name="pin">PIN string consisting of 1 to 16 ASCII characters.</param>
            <remarks>
            <para>Is not supported on all platforms.
            For instance see the Widcomm documentation 
            </para>
            <para>Assigning null (Nothing in VB) or an empty String will revoke the PIN.
            </para>
            </remarks>
        </member>
        <member name="M:InTheHand.Net.Sockets.BluetoothClient.GetRemoteMachineName(InTheHand.Net.BluetoothAddress)">
            <summary>
            Gets the name of the specified remote device.
            </summary>
            <param name="a">Address of remote device.</param>
            <returns>Friendly name of specified device.</returns>
        </member>
        <member name="M:InTheHand.Net.Sockets.BluetoothClient.GetRemoteMachineName(System.Net.Sockets.Socket)">
            <summary>
            Gets the name of a device by a specified socket.
            </summary>
            <param name="s"> A <see cref="T:System.Net.Sockets.Socket"/>.</param>
            <returns>Returns a string value of the computer or device name.</returns>
        </member>
        <member name="M:InTheHand.Net.Sockets.BluetoothClient.Dispose">
            <summary>
            Closes the <see cref="T:InTheHand.Net.Sockets.BluetoothClient"/> and the underlying connection.
            </summary>
            -
            <seealso cref="M:InTheHand.Net.Sockets.BluetoothClient.Close"/>
        </member>
        <member name="P:InTheHand.Net.Sockets.BluetoothClient.InquiryAccessCode">
            <summary>
            Get or set the Device Discovery Inquiry Access Code.
            </summary>
            -
            <remarks>
            <para>This is supported only the Microsoft stack on WindowsMobile/etc.
            It is not supported on any other platforms.
            </para>
            <para>The default value is
            <see cref="F:InTheHand.Net.BluetoothAddress.Giac">GIAC</see> (0x9E8B33).
            See also constant 
            <see cref="F:InTheHand.Net.BluetoothAddress.Liac">LIAC</see> (0x9E8B00).
            The valid range is 0x9E8B00 through 0x9E8B3f.
            </para>
            </remarks>
            -
            <value>An <see cref="T:System.Int32"/> containing the Access Code
            to be used for Inquiry.
            </value>
        </member>
        <member name="P:InTheHand.Net.Sockets.BluetoothClient.InquiryLength">
            <summary>
            Amount of time allowed to perform the query.
            </summary>
            <remarks>On Windows CE the actual value used is expressed in units of 1.28 seconds, so will be the nearest match for the value supplied.
            The default value is 10 seconds. The maximum is 60 seconds.</remarks>
        </member>
        <member name="P:InTheHand.Net.Sockets.BluetoothClient.Available">
            <summary>
            Gets the amount of data that has been received from the network and is available to be read.
            </summary>
            <value>The number of bytes of data received from the network and available to be read.</value>
            <exception cref="T:System.ObjectDisposedException">The <see cref="T:System.Net.Sockets.Socket"/> has been closed.</exception>
        </member>
        <member name="P:InTheHand.Net.Sockets.BluetoothClient.Client">
            <summary>
            Gets or sets the underlying <see cref="T:System.Net.Sockets.Socket"/>.
            </summary>
            -
            <value>The underlying network <see cref="T:System.Net.Sockets.Socket"/>.</value>
            -
            <remarks>
            <note>The property is only supported on Microsoft Bluetooth stack platforms.
            </note>
            </remarks>
        </member>
        <member name="P:InTheHand.Net.Sockets.BluetoothClient.Connected">
            <summary>
            Gets a value indicating whether the underlying <see cref="T:System.Net.Sockets.Socket"/> for a <see cref="T:InTheHand.Net.Sockets.BluetoothClient"/> is connected to a remote host.
            </summary>
            <value>true if the <see cref="P:InTheHand.Net.Sockets.BluetoothClient.Client"/> socket was connected to a remote resource as of the most recent operation; otherwise, false.</value>
        </member>
        <member name="P:InTheHand.Net.Sockets.BluetoothClient.LingerState">
            <summary>
            Gets or sets a value that specifies whether the client will delay closing 
            in an attempt to send all pending data.
            </summary>
            -
            <remarks>
            <para>See <see cref="P:System.Net.Sockets.Socket.LingerState">Socket.LingerState</see>.
            </para>
            <para>In Widcomm, linger <c>false</c> (disabled) is not supported.
            </para>
            </remarks>
            -
            <value>A <see cref="T:System.Net.Sockets.LingerOption"/> that specifies 
            how to linger while closing a socket.
            </value>
        </member>
        <member name="P:InTheHand.Net.Sockets.BluetoothClient.Authenticate">
            <summary>
            Sets whether an authenticated connection is required.
            </summary>
            <remarks>
            <para>Supported mostly on the Microsoft stack (desktop and WM/CE).
            </para>
            For disconnected sockets, specifies that authentication is required in order for a connect or accept operation to complete successfully.
            Setting this option actively initiates authentication during connection establishment, if the two Bluetooth devices were not previously authenticated.
            The user interface for passkey exchange, if necessary, is provided by the operating system outside the application context.
            For outgoing connections that require authentication, the connect operation fails (on Win32, with WSAEACCES) if authentication is not successful.
            In response, the application may prompt the user to authenticate the two Bluetooth devices before connection.
            For incoming connections, the connection is rejected if authentication cannot be established and fails (on Win32, returning a WSAEHOSTDOWN error).
            <para>MSDN. Desktop: <see href="http://msdn.microsoft.com/en-us/library/aa362911(VS.85).aspx" />
            , WM: <see href="http://msdn.microsoft.com/en-us/library/aa915899.aspx" />
            </para>
            </remarks>
        </member>
        <member name="P:InTheHand.Net.Sockets.BluetoothClient.Encrypt">
            <summary>
            Sets whether an encrypted connection is required.
            </summary>
            -
            <remarks>
            <para>Supported mostly on the Microsoft stack (desktop and WM/CE).
            </para>
            On unconnected sockets, enforces encryption to establish a connection.
            Encryption is only available for authenticated connections.
            For incoming connections, a connection for which encryption cannot be established is automatically rejected (and on Win32, returns WSAEHOSTDOWN as the error).
            For outgoing connections, the Connect function fails (on Win32, with WSAEACCES) if encryption cannot be established.
            In response, the application may prompt the user to authenticate the two Bluetooth devices before connection.
            <note>For Windows Mobile/CE:
            On a connected socket, this command will toggle encryption for all sessions sharing the same Baseband connection. You should use it ONLY if you know what you are doing (for example, yours is the only application); otherwise, the link presumed more secure by another application may become unencrypted.
            </note>
            <para>MSDN. Desktop: <see href="http://msdn.microsoft.com/en-us/library/aa362911(VS.85).aspx" />
            , WM: <see href="http://msdn.microsoft.com/en-us/library/aa915899.aspx" />
            </para>
            </remarks>
        </member>
        <member name="P:InTheHand.Net.Sockets.BluetoothClient.LinkKey">
            <summary>
            Returns link key associated with peer Bluetooth device.
            </summary>
        </member>
        <member name="P:InTheHand.Net.Sockets.BluetoothClient.LinkPolicy">
            <summary>
            Returns the Link Policy of the current connection.
            </summary>
        </member>
        <member name="P:InTheHand.Net.Sockets.BluetoothClient.RemoteEndPoint">
            <summary>
            Get the remote endpoint.
            </summary>
            -
            <value>
            The <see cref="T:InTheHand.Net.BluetoothEndPoint"/> with which the 
            <see cref="T:InTheHand.Net.Sockets.BluetoothClient"/> is communicating.
            </value>
            -
            <remarks>
            <para>Note it can't be guaranteed that the <see cref="P:InTheHand.Net.BluetoothEndPoint.Service"/>
            and <see cref="P:InTheHand.Net.BluetoothEndPoint.Port"/> parts
            of the returned endpoint are valid; and this will affect the
            <see cref="M:InTheHand.Net.BluetoothEndPoint.ToString"/> output.
            In particular, on MSFT, the <see cref="P:InTheHand.Net.Sockets.BluetoothClient.RemoteEndPoint"/>
            for a client connection seems to have no <see cref="P:InTheHand.Net.BluetoothEndPoint.Port"/>
            and a garbage <see cref="P:InTheHand.Net.BluetoothEndPoint.Service"/>,
            so we would display garbage there in <see cref="M:InTheHand.Net.BluetoothEndPoint.ToString"/>.
            An in-bound/server connection however does have a valid Port.
            (There the endpoints are returned from the native socket).
            On the other hand on Widcomm, Bluetopia and on BlueSoleil the
            opposite is the case: for a client the Port is known but it isn't
            for a server, and the <see cref="P:InTheHand.Net.BluetoothEndPoint.Service"/>
            is blank in both cases.
            </para>
            </remarks>
        </member>
        <member name="P:InTheHand.Net.Sockets.BluetoothClient.RemoteMachineName">
            <summary>
            Gets the name of the remote device.
            </summary>
        </member>
        <member name="T:InTheHand.Net.Sockets.BluetoothClient.LiveDiscoveryCallback">
            <exclude/>
        </member>
        <member name="T:InTheHand.Net.Sockets.IrDAHints">
            <summary>
            Describes an enumeration of possible device types, such as Fax.
            </summary>
            <seealso cref="T:System.Net.Sockets.IrDAHints"/>
        </member>
        <member name="F:InTheHand.Net.Sockets.IrDAHints.None">
            <summary>
            Unspecified device type.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Sockets.IrDAHints.PnP">
            <summary>
            A Plug and Play interface.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Sockets.IrDAHints.PdaAndPalmtop">
            <summary>
            A Pocket PC or similar.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Sockets.IrDAHints.Computer">
            <summary>
            A personal computer.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Sockets.IrDAHints.Printer">
            <summary>
            A printer.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Sockets.IrDAHints.Modem">
            <summary>
            A modem.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Sockets.IrDAHints.Fax">
            <summary>
            A fax.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Sockets.IrDAHints.LanAccess">
            <summary>
            A local area network access.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Sockets.IrDAHints.Extension">
            <summary>
            Contains extended hint bytes.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Sockets.IrDAHints.Telephony">
            <summary>
            A telephonic device.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Sockets.IrDAHints.FileServer">
            <summary>
            A personal computer file server.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Sockets.IrDAHints.IrCOMM">
            <summary>
            Device supports IrCOMM.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Sockets.IrDAHints.Obex">
            <summary>
            Device supports Object Exchange.
            </summary>
        </member>
        <member name="T:InTheHand.Net.Bluetooth.BluetoothWin32Events">
            <summary>
            Provides access to the Bluetooth events from the Microsoft stack on
            desktop Windows.
            </summary>
            -
            <remarks>
            <note>Supported only by the Microsoft stack on desktop Windows.
            </note>
            <para>The Microsoft Bluetooth stack on Window raises events for various
            Bluetooth actions.  We expose that feature via this class.
            </para>
            <para>Currently it raises two types of event: in-range and out-of-range
            using classes: <see cref="T:InTheHand.Net.Bluetooth.BluetoothWin32RadioInRangeEventArgs"/>
            and <see cref="T:InTheHand.Net.Bluetooth.BluetoothWin32RadioOutOfRangeEventArgs"/>.
            Both have properties <c>Device</c> which return a <c>BluetoothDeviceInfo</c>.
            Then the in-range event also includes a set of flags, which in
            Windows XP are: Address, Cod, Name, Paired, Personal, and Connected;
            more events are available in Windows 7.  These events are provided on
            the <see cref="T:InTheHand.Net.Bluetooth.BluetoothWin32RadioInRangeEventArgs"/>
            class via properties:
            <see cref="P:InTheHand.Net.Bluetooth.BluetoothWin32RadioInRangeEventArgs.CurrentState"/>
            and <see cref="P:InTheHand.Net.Bluetooth.BluetoothWin32RadioInRangeEventArgs.PreviousState"/>,
            and also <see cref="P:InTheHand.Net.Bluetooth.BluetoothWin32RadioInRangeEventArgs.GainedStates"/> etc.
            </para>
            <para>To see the events get an instance of this class via its method
            <see cref="M:InTheHand.Net.Bluetooth.BluetoothWin32Events.GetInstance"/>.
            Then one should register for the events on that instance and keep a
            reference to it.
            </para>
            <para>Note that just being in range is not enough for
            devices to know that the other is present.  Without running device
            discovery or a connection attempt the two devices will not see each
            other.  Note however that Windows XP also does not raise events when
            running device discovery (inquiry), this is fixed in Windows 7
            (probably Vista).  See
            <see href="http://32feetnetdev.wordpress.com/2010/11/15/device-discovery-improvements-on-msftwin32/">32feet blog: Device Discovery improvements on MSFT+Win32</see>
            for more information.
            </para>
            
            <para>For example when connecting and disconnecting on Windows XP to
            another device that is not paired we see:
            </para>
            <example>
            <code lang="none">
            12:23:48.9582648: InRange 000A3A6865BB 'joe',
                now 'Address, Cod, Name, Connected'
                was 'Address, Cod, Name'.
            12:24:16.8009456: InRange 000A3A6865BB 'joe',
                now 'Address, Cod, Name'
                was 'Address, Cod, Name, Connected'.}}
            </code>
            </example>
            <para>For example when connecting and then disconnecting on Windows 7
            to another v2.1 device that is paired with we see:
            </para>
            <example>
            <code lang="none">
            20:53:25.5605469: InRange 00190E02C916 'alanlt2ws',
                now 'Address, Cod, Name, Paired, Personal, Connected, SspSupported, SspPaired, Rssi, Eir'
                was 'Address, Cod, Name, Paired, Personal,            SspSupported, SspPaired, Rssi, Eir'.
            20:53:27.7949219: InRange 00190E02C916 'fred',
                now 'Address, Cod, Name, Paired, Personal,            SspSupported, SspPaired, Rssi, Eir'
                was 'Address, Cod, Name, Paired, Personal, Connected, SspSupported, SspPaired, Rssi, Eir'.}}
            </code>
            </example>
            </remarks>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.BluetoothWin32Events.#ctor">
            <summary>
            Initialise an instance of the class.
            </summary>
            -
            <remarks>
            <para>Consider using the method <see cref="M:InTheHand.Net.Bluetooth.BluetoothWin32Events.GetInstance"/>
            instead of calling this constructor.
            </para>
            </remarks>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.BluetoothWin32Events.#ctor(InTheHand.Net.Bluetooth.BluetoothRadio)">
            <summary>
            Initialise an instance of the class for the specified radio.
            </summary>
            -
            <param name="microsoftWin32BluetoothRadio">
            The radio to listen for events from.
            Must be non-null and a MSFT+Win32 stack radio.
            </param>
            -
            <remarks>Note that since the Microsoft stack supports only one radio
            (controller) there is lilely no benefit in calling this constructor
            as opposed to the other constructor or method
            <see cref="M:InTheHand.Net.Bluetooth.BluetoothWin32Events.GetInstance"/>.
            </remarks>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.BluetoothWin32Events.GetInstance">
            <summary>
            Gets a possible shared instance of this class.
            </summary>
            -
            <remarks>
            <para>If more that one piece of code is using this class then there
            is no need for each to have a private instance.  This method allows
            them to access a shared instance.  When first called it creates a
            new instance and keeps a weak-reference to it.  Subsequent callers
            will then get the same instance.  The instance is kept alive only
            as long as at least one caller keeps a reference to it.  If no
            references are kept then the instance will be deleted and a new
            instance will be created when this method is next called.
            </para>
            </remarks>
            -
            <returns>An instance of this class.
            </returns>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.BluetoothWin32Events.OnInRange(InTheHand.Net.Bluetooth.BluetoothWin32RadioInRangeEventArgs)">
            <summary>
            Raises the <see cref="E:InTheHand.Net.Bluetooth.BluetoothWin32Events.InRange"/> event.
            </summary>
            -
            <param name="e">A <see cref="T:InTheHand.Net.Bluetooth.BluetoothWin32RadioInRangeEventArgs"/>
            that contains the event data.
            </param>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.BluetoothWin32Events.OnOutOfRange(InTheHand.Net.Bluetooth.BluetoothWin32RadioOutOfRangeEventArgs)">
            <summary>
            Raises the <see cref="E:InTheHand.Net.Bluetooth.BluetoothWin32Events.OutOfRange"/> event.
            </summary>
            -
            <param name="e">A <see cref="T:InTheHand.Net.Bluetooth.BluetoothWin32RadioOutOfRangeEventArgs"/>
            that contains the event data.
            </param>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.BluetoothWin32Events.Dispose">
            <summary>
            Releases the resources used by the instance.
            </summary>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.BluetoothWin32Events.Dispose(System.Boolean)">
            <summary>
            Releases the unmanaged resources used by the instance
            and optionally releases the managed resources.
            </summary>
        </member>
        <member name="E:InTheHand.Net.Bluetooth.BluetoothWin32Events.InRange">
            <summary>
            &#x201C;This message is sent when any of the following attributes
            of a remote Bluetooth device has changed: the device has been
            discovered, the class of device, name, connected state, or device
            remembered state. This message is also sent when these attributes
            are set or cleared.&#x201D;
            </summary>
        </member>
        <member name="E:InTheHand.Net.Bluetooth.BluetoothWin32Events.OutOfRange">
            <summary>
            &#x201C;This message is sent when a previously discovered device
            has not been found after the completion of the last inquiry.&#x201D;
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothWin32Events.BluetoothDeviceNotificationEvent.BthPortDeviceInterface">
            <summary>
            &#x201C;&#x201D;
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothWin32Events.BluetoothDeviceNotificationEvent.RadioInRange">
            <summary>
            &#x201C;This message is sent when any of the following attributes of a remote Bluetooth device has changed:
            the device has been discovered, the class of device, name, connected state, or device remembered state.
            This message is also sent when these attributes are set or cleared.&#x201D;
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothWin32Events.BluetoothDeviceNotificationEvent.RadioOutOfRange">
            <summary>
            &#x201C;This message is sent when a previously discovered device has not been found after the completion of the last inquiry.
            This message will not be sent for remembered devices.
            The BTH_ADDRESS structure is the address of the device that was not found.&#x201D;
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothWin32Events.BluetoothDeviceNotificationEvent.PinRequest">
            <summary>
            &#x201C;This message should be ignored by the application.
            If the application must receive PIN requests, the BluetoothRegisterForAuthentication function should be used.&#x201D;
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothWin32Events.BluetoothDeviceNotificationEvent.L2capEvent">
            <summary>
            &#x201C;This message is sent when an L2CAP channel between the local radio and a remote Bluetooth device has been established or terminated. 
            For L2CAP channels that are multiplexers, such as RFCOMM, this message is only sent when the underlying channel is established, 
            not when each multiplexed channel, such as an RFCOMM channel, is established or terminated.&#x201D;
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothWin32Events.BluetoothDeviceNotificationEvent.HciEvent">
            <summary>
            &#x201C;This message is sent when a remote Bluetooth device connects or disconnects at the ACL level.&#x201D;
            </summary>
        </member>
        <member name="T:InTheHand.Net.Bluetooth.BluetoothWin32Events.BTH_L2CAP_EVENT_INFO">
            <summary>
            Buffer associated with GUID_BLUETOOTH_L2CAP_EVENT
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothWin32Events.BTH_L2CAP_EVENT_INFO.bthAddress">
            <summary>
            Remote radio address which the L2CAP event is associated with
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothWin32Events.BTH_L2CAP_EVENT_INFO.psm">
            <summary>
            The PSM that is either being connected to or disconnected from
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothWin32Events.BTH_L2CAP_EVENT_INFO.connected">
            <summary>
            If != 0, then the channel has just been established.  If == 0, then the
            channel has been destroyed.  Notifications for a destroyed channel will
            only be sent for channels successfully established.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothWin32Events.BTH_L2CAP_EVENT_INFO.initiated">
            <summary>
            If != 0, then the local host iniated the l2cap connection.  If == 0, then
            the remote host initated the connection.  This field is only valid if
            connect is != 0.
            </summary>
        </member>
        <member name="T:InTheHand.Net.Bluetooth.BluetoothWin32Events.BTH_HCI_EVENT_INFO">
            <summary>
            Buffer associated with GUID_BLUETOOTH_HCI_EVENT
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothWin32Events.BTH_HCI_EVENT_INFO.bthAddress">
            <summary>
            Remote radio address which the HCI event is associated with
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothWin32Events.BTH_HCI_EVENT_INFO.connectionType">
            <summary>
            HCI_CONNNECTION_TYPE_XXX value
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothWin32Events.BTH_HCI_EVENT_INFO.connected">
            <summary>
            If != 0, then the underlying connection to the remote radio has just
            been estrablished.  If == 0, then the underlying conneciton has just been
            destroyed.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothWin32Events.Dbt.ConfigChangeCanceled">
            <summary>
            A request to change the current configuration (dock or undock) has been canceled. 
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothWin32Events.Dbt.ConfigChanged">
            <summary>
            The current configuration has changed, due to a dock or undock. 
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothWin32Events.Dbt.CustomEvent">
            <summary>
            A custom event has occurred. 
            </summary>
            <remarks>Windows NT 4.0 and Windows 95:  This value is not supported.</remarks>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothWin32Events.Dbt.DeviceArrival">
            <summary>
            A device or piece of media has been inserted and is now available. 
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothWin32Events.Dbt.DeviceQueryRemove">
            <summary>
            Permission is requested to remove a device or piece of media. Any application can deny this request and cancel the removal. 
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothWin32Events.Dbt.DeviceQueryRemoveFailed">
            <summary>
            A request to remove a device or piece of media has been canceled. 
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothWin32Events.Dbt.DeviceRemoveComplete">
            <summary>
            A device or piece of media has been removed. 
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothWin32Events.Dbt.DeviceRemovePending">
            <summary>
            A device or piece of media is about to be removed. Cannot be denied. 
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothWin32Events.Dbt.DeviceTypeSpecific">
            <summary>
            A device-specific event has occurred. 
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothWin32Events.Dbt.DevNodesChanged">
            <summary>
            A device has been added to or removed from the system. 
            </summary>
            <remarks>Windows NT 4.0 and Windows Me/98/95:  This value is not supported.</remarks>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothWin32Events.Dbt.QueryChangeConfig">
            <summary>
            Permission is requested to change the current configuration (dock or undock). 
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothWin32Events.Dbt.UserDefined">
            <summary>
            The meaning of this message is user-defined. 
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothWin32Events.DbtDevTyp.Oem">
            <summary>
            oem-defined device type
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothWin32Events.DbtDevTyp.DevNode">
            <summary>
            devnode number
            /// </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothWin32Events.DbtDevTyp.Volume">
            <summary>
            
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothWin32Events.DbtDevTyp.Port">
            <summary>
            l
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothWin32Events.DbtDevTyp.Network">
            <summary>
            network resource
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothWin32Events.DbtDevTyp.DeviceInterface">
            <summary>
            device interface class
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothWin32Events.DbtDevTyp.Handle">
            <summary>
            file system handle
            </summary>
        </member>
        <member name="T:InTheHand.Net.Bluetooth.Factory.IBluetoothSecurity">
            <summary>
            Handles security between bluetooth devices.
            </summary>
            -
            <remarks>
            <para>Used by <see cref="P:InTheHand.Net.Bluetooth.BluetoothPublicFactory.BluetoothSecurity"/>.
            </para>
            </remarks>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.Factory.IBluetoothSecurity.PairRequest(InTheHand.Net.BluetoothAddress,System.String)">
            <summary>
            Intiates pairing for a remote device.
            </summary>
            -
            <param name="device">Remote device with which to pair.</param>
            <param name="pin">Chosen PIN code, must be between 1 and 16 ASCII characters.</param>
            -
            <returns>Whether the operation was successful.</returns>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.Factory.IBluetoothSecurity.RemoveDevice(InTheHand.Net.BluetoothAddress)">
            <summary>
            Remove the pairing with the specified device
            </summary>
            -
            <param name="device">Remote device with which to remove pairing.</param>
            -
            <returns>TRUE if device was successfully removed, else FALSE.</returns>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.Factory.IBluetoothSecurity.SetPin(InTheHand.Net.BluetoothAddress,System.String)">
            <summary>
            This function stores the personal identification number (PIN) for the Bluetooth device.
            </summary>
            <param name="device">Address of remote device.</param>
            <param name="pin">Pin, alphanumeric string of between 1 and 16 ASCII characters.</param>
            <remarks><para>On Windows CE platforms this calls <c>BthSetPIN</c>,
            its MSDN remarks say:
            </para>
            <para>&#x201C;Stores the pin for the Bluetooth device identified in pba.
            The active connection to the device is not necessary, nor is the presence
            of the Bluetooth controller. The PIN is persisted in the registry until
            BthRevokePIN is called.
            </para>
            <para>&#x201C;While the PIN is stored, it is supplied automatically
            after the PIN request is issued by the authentication mechanism, so the
            user will not be prompted for it. Typically, for UI-based devices, you
            would set the PIN for the duration of authentication, and then revoke
            it after authentication is complete.&#x201D;
            </para>
            <para>See also 
            <see cref="M:InTheHand.Net.Bluetooth.BluetoothSecurity.RevokePin(InTheHand.Net.BluetoothAddress)"/>
            </para>
            </remarks>
            <returns>True on success, else False.</returns>
            <seealso cref="M:InTheHand.Net.Bluetooth.BluetoothSecurity.RevokePin(InTheHand.Net.BluetoothAddress)"/>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.Factory.IBluetoothSecurity.RevokePin(InTheHand.Net.BluetoothAddress)">
            <summary>
            This function revokes the personal identification number (PIN) for the Bluetooth device.
            </summary>
            <remarks><para>On Windows CE platforms this calls <c>BthRevokePIN</c>,
            its MSDN remarks say:
            </para>
            <para>&#x201C;When the PIN is revoked, it is removed from registry.
            The active connection to the device is not necessary, nor is the presence
            of the Bluetooth controller.&#x201D;
            </para>
            <para>On Windows CE platforms this removes any pending BluetoothWin32Authentication object but does not remove the PIN for an already authenticated device.
            Use RemoveDevice to ensure a pairing is completely removed.</para>
            <para>See also 
            <see cref="M:InTheHand.Net.Bluetooth.BluetoothSecurity.SetPin(InTheHand.Net.BluetoothAddress,System.String)"/>
            </para>
            </remarks>
            <param name="device">The remote device.</param>
            <returns>True on success, else False.</returns>
            <seealso cref="M:InTheHand.Net.Bluetooth.BluetoothSecurity.SetPin(InTheHand.Net.BluetoothAddress,System.String)"/>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.Factory.IBluetoothSecurity.GetPinRequest">
            <summary>
            Retrieves the address of the Bluetooth peer device authentication that requires the PIN code.
            <para><b>Not supported on Windows XP</b></para>
            </summary>
            <remarks><para>On Windows CE platforms this calls <c>BthGetPINRequest</c>,
            its MSDN remarks say:
            </para>
            <para>“There can be multiple requests outstanding. After the event
            that is provided by the UI handler is signaled, the UI handler must call
            this function multiple times until the call fails.”
            </para>
            <para>See also 
            <see cref="M:InTheHand.Net.Bluetooth.BluetoothSecurity.RefusePinRequest(InTheHand.Net.BluetoothAddress)"/>
            and <see cref="M:InTheHand.Net.Bluetooth.BluetoothSecurity.AnswerPinRequest(InTheHand.Net.BluetoothAddress,System.String)"/>
            </para>
            </remarks>
            <returns><see cref="T:InTheHand.Net.BluetoothAddress"/> of the remote device, or null if there is no outstanding PIN request.</returns>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.Factory.IBluetoothSecurity.RefusePinRequest(InTheHand.Net.BluetoothAddress)">
            <summary>
            Refuses an outstanding PIN request.
            <para><b>Not supported on Windows XP</b></para>
            </summary>
            -
            <param name="device">Address of the requesting device.</param>
            -
            <returns><c>true</c> if the operation was successful; <c>false</c> otherwise.</returns>
            -
            <remarks><para>On Windows CE platforms this calls <c>BthRefusePINRequest</c>,
            its MSDN remarks say:
            </para>
            <para>&#x201C;This function refuses an outstanding PIN request that is
            retrieved by <see cref="M:InTheHand.Net.Bluetooth.BluetoothSecurity.GetPinRequest"/>
            function.&#x201D;
            </para>
            <para>See also 
            <see cref="M:InTheHand.Net.Bluetooth.BluetoothSecurity.GetPinRequest"/>
            and <see cref="M:InTheHand.Net.Bluetooth.BluetoothSecurity.AnswerPinRequest(InTheHand.Net.BluetoothAddress,System.String)"/>
            </para>
            </remarks>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.Factory.IBluetoothSecurity.SetLinkKey(InTheHand.Net.BluetoothAddress,System.Guid)">
            <summary>
            <para><b>Not supported on Windows XP</b></para>
            </summary>
            -
            <param name="device">The device whose Link Key to retrieve.</param>
            <param name="linkKey">The 16-byte Link Key to set.</param>
            -
            <returns><c>true</c> if the operation was successful; <c>false</c> otherwise.</returns>
            -
            <remarks><para>On Windows CE platforms this calls <c>BthSetLinkKey</c>,
            its MSDN remarks say:
            </para>
            <para>&#x201C;The link key is persisted in registry until <c>BthRevokeLinkKey</c>
            is called.
            </para>
            <para>&#x201C;Typically, the Bluetooth stack manages link keys automatically,
            for example, it stores them when they are created. This function is useful
            primarily for backup purposes.
            </para>
            <para>&#x201C;While link key is stored, it will be automatically supplied
            once the link key request is issued by the authentication mechanism. If
            the link key is incorrect, the renegotiation that involves the PIN is
            initiated by the Bluetooth adapter, and the PIN code may be requested
            from the user.
            </para>
            <para>&#x201C;The link key length is 16 bytes. You cannot create link
            keys; they are generated by the Bluetooth hardware.&#x201D;
            </para>
            </remarks>
            <returns></returns>
        </member>
        <member name="T:InTheHand.Net.Mime.MediaTypeNames">
            <summary>
            Specifies the media type information for an object.
            </summary>
        </member>
        <member name="T:InTheHand.Net.Mime.MediaTypeNames.Image">
            <summary>
            Specifies the type of image data in an object.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Mime.MediaTypeNames.Image.Gif">
            <summary>
            Specifies that the image data is in Graphics Interchange Format (GIF).
            </summary>
        </member>
        <member name="F:InTheHand.Net.Mime.MediaTypeNames.Image.Jpg">
            <summary>
            Specifies that the image data is in Joint Photographic Experts Group (JPEG) format.
            </summary>
        </member>
        <member name="T:InTheHand.Net.Mime.MediaTypeNames.Text">
            <summary>
            Specifies the type of text data in an object.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Mime.MediaTypeNames.Text.Html">
            <summary>
            Specifies that the data is in HTML format.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Mime.MediaTypeNames.Text.Plain">
            <summary>
            Specifies that the data is in plain text format.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Mime.MediaTypeNames.Text.vCalendar">
            <summary>
            Specifies that the data is in vCalendar format.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Mime.MediaTypeNames.Text.vCard">
            <summary>
            Specifies that the data is in vCard format.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Mime.MediaTypeNames.Text.vMessage">
            <summary>
            Specifies that the data is in vMsg format.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Mime.MediaTypeNames.Text.vNote">
            <summary>
            Specifies that the data is in vNote format.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Mime.MediaTypeNames.Text.Xml">
            <summary>
            Specifies that the data is in XML format.
            </summary>
        </member>
        <member name="T:InTheHand.Net.Mime.MediaTypeNames.ObjectExchange">
            <summary>
            Specifies the type of Object Exchange specific data.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Mime.MediaTypeNames.ObjectExchange.Capabilities">
            <summary>
            Used to retrieve supported object types.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Mime.MediaTypeNames.ObjectExchange.FolderListing">
            <summary>
            Used to retrieve folder listing with OBEX FTP.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Mime.MediaTypeNames.ObjectExchange.ObjectProfile">
            <summary>
            Used to retrieve an object profile.
            </summary>
        </member>
        <member name="T:InTheHand.Net.IrDA.IrDAAttributeType">
            <summary>
            Defines the type of an IAS attribute.
            </summary>
        </member>
        <member name="F:InTheHand.Net.IrDA.IrDAAttributeType.Integer">
            <summary>
            Identifies an integer attribute value.
            </summary>
        </member>
        <member name="F:InTheHand.Net.IrDA.IrDAAttributeType.OctetSequence">
            <summary>
            Identifies a binary, or octet, attribute value.
            </summary>
        </member>
        <member name="F:InTheHand.Net.IrDA.IrDAAttributeType.String">
            <summary>
            Identifies a string attribute value.
            </summary>
        </member>
        <member name="T:InTheHand.Net.Bluetooth.ServiceRecordHelper">
            <summary>
            Some useful methods for working with a SDP <see cref="T:InTheHand.Net.Bluetooth.ServiceRecord"/>
            including creating and accessing the <see cref="F:InTheHand.Net.Bluetooth.AttributeIds.UniversalAttributeId.ProtocolDescriptorList"/>
            for an RFCOMM service.
            </summary>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.ServiceRecordHelper.GetRfcommChannelElement(InTheHand.Net.Bluetooth.ServiceRecord)">
            <summary>
            Reads the RFCOMM Channel Number element from the service record.
            </summary>
            -
            <param name="record">The <see cref="T:InTheHand.Net.Bluetooth.ServiceRecord"/>
            to search for the element.
            </param>
            -
            <returns>The <see cref="T:InTheHand.Net.Bluetooth.ServiceElement"/>
            holding the Channel Number.
            or <see langword="null"/> if at the <see cref="F:InTheHand.Net.Bluetooth.AttributeIds.UniversalAttributeId.ProtocolDescriptorList"/>
            attribute is missing or contains invalid elements.
            </returns>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.ServiceRecordHelper.GetL2CapChannelElement(InTheHand.Net.Bluetooth.ServiceRecord)">
            <summary>
            Reads the L2CAP Channel Number element from the service record.
            </summary>
            -
            <param name="record">The <see cref="T:InTheHand.Net.Bluetooth.ServiceRecord"/>
            to search for the element.
            </param>
            -
            <returns>The <see cref="T:InTheHand.Net.Bluetooth.ServiceElement"/>
            holding the Channel Number.
            or <see langword="null"/> if at the <see cref="F:InTheHand.Net.Bluetooth.AttributeIds.UniversalAttributeId.ProtocolDescriptorList"/>
            attribute is missing or contains invalid elements.
            </returns>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.ServiceRecordHelper.GetRfcommChannelNumber(InTheHand.Net.Bluetooth.ServiceRecord)">
            <summary>
            Reads the RFCOMM Channel Number value from the service record,
            or returns -1 if the element is not present.
            </summary>
            -
            <param name="record">The <see cref="T:InTheHand.Net.Bluetooth.ServiceRecord"/>
            to search for the element.
            </param>
            -
            <returns>The Channel Number as an unsigned byte cast to an Int32, 
            or -1 if at the <see cref="F:InTheHand.Net.Bluetooth.AttributeIds.UniversalAttributeId.ProtocolDescriptorList"/>
            attribute is missing or contains invalid elements.
            </returns>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.ServiceRecordHelper.GetL2CapChannelNumber(InTheHand.Net.Bluetooth.ServiceRecord)">
            <summary>
            Reads the L2CAP Channel Number value from the service record,
            or returns -1 if the element is not present.
            </summary>
            -
            <param name="record">The <see cref="T:InTheHand.Net.Bluetooth.ServiceRecord"/>
            to search for the element.
            </param>
            -
            <returns>The PSM number as an uint16 cast to an Int32, 
            or -1 if at the <see cref="F:InTheHand.Net.Bluetooth.AttributeIds.UniversalAttributeId.ProtocolDescriptorList"/>
            attribute is missing or contains invalid elements.
            </returns>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.ServiceRecordHelper.SetRfcommChannelNumber(InTheHand.Net.Bluetooth.ServiceRecord,System.Byte)">
            <summary>
            Sets the RFCOMM Channel Number value in the service record.
            </summary>
            -
            <param name="record">The <see cref="T:InTheHand.Net.Bluetooth.ServiceRecord"/>
            in which to set the RFCOMM Channel number.
            </param>
            <param name="channelNumber">The Channel number to set in the record.
            </param>
            -
            <exception cref="T:System.InvalidOperationException">The
            <see cref="F:InTheHand.Net.Bluetooth.AttributeIds.UniversalAttributeId.ProtocolDescriptorList"/>
            attribute is missing or contains invalid elements.
            </exception>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.ServiceRecordHelper.SetL2CapPsmNumber(InTheHand.Net.Bluetooth.ServiceRecord,System.Int32)">
            <summary>
            Sets the RFCOMM Channel Number value in the service record.
            </summary>
            -
            <remarks>
            <para>Note: We use an <see cref="T:System.Int32"/> for the
            <paramref name="psm"/> parameter as its natural type <see cref="T:System.UInt16"/> 
            in not usable in CLS Compliant interfaces.
            </para>
            </remarks>
            -
            <param name="record">The <see cref="T:InTheHand.Net.Bluetooth.ServiceRecord"/>
            in which to set the L2CAP PSM value.
            </param>
            <param name="psm">The PSM value to set in the record.
            Note that although the parameter is of type <see cref="T:System.Int32"/> 
            the value must actually be in the range of a <see cref="T:System.UInt16"/>,
            see the remarks for more information.
            </param>
            -
            <exception cref="T:System.InvalidOperationException">The
            <see cref="F:InTheHand.Net.Bluetooth.AttributeIds.UniversalAttributeId.ProtocolDescriptorList"/>
            attribute is missing or contains invalid elements.
            </exception>
            <exception cref="T:System.ArgumentOutOfRangeException">
            The PSM must fit in a 16-bit unsigned integer.
            </exception>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.ServiceRecordHelper.CreateL2CapProtocolDescriptorList">
            <summary>
            Creates the data element for the 
            <see cref="F:InTheHand.Net.Bluetooth.AttributeIds.UniversalAttributeId.ProtocolDescriptorList"/>
            attribute in an L2CAP service
            </summary>
            -
            <returns>The new <see cref="T:InTheHand.Net.Bluetooth.ServiceElement"/>.</returns>
            -
            <remarks>Thus is the following structure:
            <code lang="none">
            ElementSequence
               ElementSequence
                  Uuid16 = L2CAP
                  UInt16 = 0      -- The L2CAP PSM Number.
            </code>
            </remarks>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.ServiceRecordHelper.CreateRfcommProtocolDescriptorList">
            <summary>
            Creates the data element for the 
            <see cref="F:InTheHand.Net.Bluetooth.AttributeIds.UniversalAttributeId.ProtocolDescriptorList"/>
            attribute in an RFCOMM service
            </summary>
            -
            <returns>The new <see cref="T:InTheHand.Net.Bluetooth.ServiceElement"/>.</returns>
            -
            <remarks>Thus is the following structure:
            <code lang="none">
            ElementSequence
               ElementSequence
                  Uuid16 = L2CAP
               ElementSequence
                  Uuid16 = RFCOMM
                  UInt8  = 0      -- The RFCOMM Channel Number.
            </code>
            </remarks>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.ServiceRecordHelper.CreateGoepProtocolDescriptorList">
            <summary>
            Creates the data element for the 
            <see cref="F:InTheHand.Net.Bluetooth.AttributeIds.UniversalAttributeId.ProtocolDescriptorList"/>
            attribute in an GOEP (i.e. OBEX) service
            </summary>
            -
            <returns>The new <see cref="T:InTheHand.Net.Bluetooth.ServiceElement"/>.</returns>
            -
            <remarks>Thus is the following structure:
            <code lang="none">
            ElementSequence
               ElementSequence
                  Uuid16 = L2CAP
               ElementSequence
                  Uuid16 = RFCOMM
                  UInt8  = 0      -- The RFCOMM Channel Number.
               ElementSequence
                  Uuid16 = GOEP
            </code>
            </remarks>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.ServiceRecordHelper.CreateL2CapProtocolDescriptorListWithUpperLayers(InTheHand.Net.Bluetooth.ServiceElement[])">
            <summary>
            Creates the data element for the 
            <see cref="F:InTheHand.Net.Bluetooth.AttributeIds.UniversalAttributeId.ProtocolDescriptorList"/>
            attribute in an L2CAP service,
            with upper layer entries.
            </summary>
            -
            <returns>The new <see cref="T:InTheHand.Net.Bluetooth.ServiceElement"/>.</returns>
            -
            <remarks>Thus is the following structure at the first layer:
            <code lang="none">
            ElementSequence
               ElementSequence
                  Uuid16 = L2CAP
                  UInt16 = 0      -- The L2CAP PSM Number.
            </code>
            One can add layers above that; remember that all layers are formed
            of an ElementSequence.  See the example below.
            </remarks>
            -
            <example>
            <code>
            var netProtoList = new ServiceElement(ElementType.ElementSequence,
                ServiceElement.CreateNumericalServiceElement(ElementType.UInt16, 0x0800),
                ServiceElement.CreateNumericalServiceElement(ElementType.UInt16, 0x0806)
                );
            var layer1 = new ServiceElement(ElementType.ElementSequence,
                new ServiceElement(ElementType.Uuid16, Uuid16_BnepProto),
                ServiceElement.CreateNumericalServiceElement(ElementType.UInt16, 0x0100), //v1.0
                netProtoList
                );
            ServiceElement element = ServiceRecordHelper.CreateL2CapProtocolDescriptorListWithUpperLayers(
                layer1);
            </code>
            </example>
            -
            <param name="upperLayers">The list of upper layer elements, one per layer.
            As an array.
            </param>
        </member>
        <member name="T:InTheHand.Net.Sockets.BluetoothSocketOptionLevel">
            <summary>
            Defines additional Bluetooth socket option levels for the <see cref="M:System.Net.Sockets.Socket.SetSocketOption(System.Net.Sockets.SocketOptionLevel,System.Net.Sockets.SocketOptionName,System.Int32)"/> and <see cref="M:System.Net.Sockets.Socket.GetSocketOption(System.Net.Sockets.SocketOptionLevel,System.Net.Sockets.SocketOptionName)"/> methods.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Sockets.BluetoothSocketOptionLevel.RFComm">
            <summary>
            Bluetooth RFComm protocol (bt-rfcomm)
            </summary>
        </member>
        <member name="F:InTheHand.Net.Sockets.BluetoothSocketOptionLevel.L2Cap">
            <summary>
            Logical Link Control and Adaptation Protocol (bt-l2cap)
            </summary>
        </member>
        <member name="F:InTheHand.Net.Sockets.BluetoothSocketOptionLevel.Sdp">
            <summary>
            Service Discovery Protocol (bt-sdp)
            </summary>
        </member>
        <member name="P:InTheHand.Net.Bluetooth.Msft.WindowsBluetoothRadio.IsPlatformSupported">
            <summary>
            Gets a value that indicates whether the 32feet.NET library can be used with the current device.
            </summary>
        </member>
        <member name="T:InTheHand.Net.Bluetooth.Msft.WindowsBluetoothDeviceInfo">
            <summary>
            Provides information about an available device obtained by the client during device discovery.
            </summary>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.Msft.WindowsBluetoothDeviceInfo.#ctor(System.IntPtr)">
            <overloads>
            Initializes an instance of the <see cref="T:BluetoothDeviceInfo"/> class.
            </overloads>
            -
            <summary>
            Initializes an instance of the <see cref="T:BluetoothDeviceInfo"/> class with the given native structure.
            </summary>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.Msft.WindowsBluetoothDeviceInfo.#ctor(InTheHand.Net.BluetoothAddress)">
            <summary>
            Initializes an instance of the <see cref="T:BluetoothDeviceInfo"/> class 
            for the device with the given address.
            </summary>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.Msft.WindowsBluetoothDeviceInfo.Refresh">
            <summary>
            Forces the system to refresh the device information.
            </summary>
            -
            <remarks>
            See <see cref="P:InTheHand.Net.Sockets.BluetoothDeviceInfo.DeviceName"/>
            for one reason why this method is necessary.
            </remarks>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.Msft.WindowsBluetoothDeviceInfo.Update">
            <summary>
            Updates the device name used to display the device, affects the local computer cache.
            </summary>
            <remarks>On Windows CE this only affects devices which are already paired.</remarks>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.Msft.WindowsBluetoothDeviceInfo.SetServiceState(System.Guid,System.Boolean)">
             <summary>
             Enables or disables services for a Bluetooth device.
             </summary>
             <param name="service">The service GUID on the remote device.</param>
             <param name="state">Service state - TRUE to enable the service, FALSE to disable it.</param>
             <remarks>
             When called on Windows CE, the device will require a soft-reset to enabled the settings.
             
            <note>
             <para>The system maintains a mapping of service guids to supported drivers for
             Bluetooth-enabled devices. Enabling a service installs the corresponding
             device driver. Disabling a service removes the corresponding device driver.
             If a non-supported service is enabled, a driver will not be installed.
             </para>
             </note>
             <para>This overload is silent on error; the other overload raises an exception
             if required
             (<see cref="M:InTheHand.Net.Sockets.BluetoothDeviceInfo.SetServiceState(System.Guid,System.Boolean,System.Boolean)"/>).
             </para>
             </remarks>
             -
             <exception cref="T:System.PlatformNotSupportedException">
             Thrown if this method is called on Windows CE platforms.</exception>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.Msft.WindowsBluetoothDeviceInfo.SetServiceState(System.Guid,System.Boolean,System.Boolean)">
             <summary>
             Enables or disables services for a Bluetooth device.
             </summary>
             <param name="service">The service GUID on the remote device.</param>
             <param name="state">Service state - TRUE to enable the service, FALSE to disable it.</param>
             <param name="throwOnError">Whether the method should raise an exception
             when 
             </param>
             <remarks>
             When called on Windows CE, the device will require a soft-reset to enabled the settings.
            <note>
             <para>The system maintains a mapping of service guids to supported drivers for
             Bluetooth-enabled devices. Enabling a service installs the corresponding
             device driver. Disabling a service removes the corresponding device driver.
             If a non-supported service is enabled, a driver will not be installed.
             </para>
             </note>
             </remarks>
             -
             <exception cref="T:System.ComponentModel.Win32Exception">The call failed.
             </exception>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.Msft.WindowsBluetoothDeviceInfo.GetServiceRecords(System.Guid)">
            <summary>
            Run an SDP query on the device&#x2019;s Service Discovery Database.
            </summary>
            -
            <remarks>
            <para>
            For instance to see whether the device has an an Serial Port services
            search for UUID <see cref="F:InTheHand.Net.Bluetooth.BluetoothService.SerialPort"/>,
            or too find all the services that use RFCOMM use 
            <see cref="F:InTheHand.Net.Bluetooth.BluetoothService.RFCommProtocol"/>,
            or all the services use 
            <see cref="F:InTheHand.Net.Bluetooth.BluetoothService.L2CapProtocol"/>.
            </para>
            <para>
            If the device isn&#x2019;t accessible a <see cref="T:System.Net.Sockets.SocketException"/>
            with <see cref="P:System.Net.Sockets.SocketException.ErrorCode"/>
            10108 (0x277C) occurs.
            </para>
            </remarks>
            -
            <param name="service">The UUID to search for, as a <see cref="T:System.Guid"/>.
            </param>
            -
            <returns>The parsed record as an 
            <see cref="T:InTheHand.Net.Bluetooth.ServiceRecord"/>.
            </returns>
            -
            <example>
            <code lang="VB.NET">
            Dim bdi As BluetoothDeviceInfo = ...
            Dim records As ServiceRecord() = bdi.GetServiceRecords(BluetoothService.RFCommProtocol)
            ' Dump each to console
            For Each curRecord As ServiceRecord In records
               ServiceRecordUtilities.Dump(Console.Out, curRecord)
            Next
            </code>
            </example>
            
            -
            <exception cref="T:System.Net.Sockets.SocketException">
            The query failed.
            </exception>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.Msft.WindowsBluetoothDeviceInfo.GetServiceRecordsUnparsed(System.Guid)">
            <summary>
            Run an SDP query on the device&#x2019;s Service Discovery Database,
            returning the raw byte rather than a parsed record.
            </summary>
            -
            <remarks>
            If the device isn&#x2019;t accessible a <see cref="T:System.Net.Sockets.SocketException"/>
            with <see cref="P:System.Net.Sockets.SocketException.ErrorCode"/>
            10108 (0x277C) occurs.
            </remarks>
            -
            <param name="service">The UUID to search for, as a <see cref="T:System.Guid"/>.
            </param>
            -
            <returns>An array of array of <see cref="T:System.Byte"/>.</returns>
            -
            <exception cref="T:System.Net.Sockets.SocketException">
            The query failed.
            </exception>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.Msft.WindowsBluetoothDeviceInfo.GetServiceRecordsUnparsedWindowsRaw(System.Guid)">
            <summary>
            Returns the raw results from the native call(s); the format is different 
            on Win32 versus WinCE.
            </summary>
            <remarks>
            On CE this is thus a single item which is a ElementSequence of records.
            On Win32 it is an array with each item being a record.
            </remarks>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.Msft.WindowsBluetoothDeviceInfo.ShowDialog">
            <summary>
            Displays information about the device.
            </summary>
        </member>
        <member name="P:InTheHand.Net.Bluetooth.Msft.WindowsBluetoothDeviceInfo.DeviceAddress">
            <summary>
            Gets the device identifier.
            </summary>
        </member>
        <member name="P:InTheHand.Net.Bluetooth.Msft.WindowsBluetoothDeviceInfo.DeviceName">
            <summary>
            Gets a name of a device.
            </summary>
            -
            <remarks>
            <para>Note, that due the way in which Bluetooth device discovery works,
            the existence and address of a device is known first, but a separate
            query has to be carried out to find whether the device also has a name.
            This means that if a device is discovered afresh then this property might
            return only a text version of the device&#x2019;s address and not its
            name, one can also see this in the Windows&#x2019; Bluetooth device dialogs
            where the device appears first with its address and the name is later
            updated.  To see the name, wait for some time and access this property again
            having called <see cref="M:InTheHand.Net.Sockets.BluetoothDeviceInfo.Refresh"/>
            in the meantime.
            </para>
            </remarks>
        </member>
        <member name="P:InTheHand.Net.Bluetooth.Msft.WindowsBluetoothDeviceInfo.ClassOfDevice">
            <summary>
            Returns the Class of Device of the remote device.
            </summary>
            -
            <remarks>
            <para>
            Some CE 4.2 devices such as original PPC2003 devices don't have the native 
            API on which this property depends &#x2014; it was added as part of a hotfix. 
            The property will always return zero in such a case.  On WM/CE we also 
            attempt to get the CoD value as part of the discovery process; this is 
            of course only works for devices in-range.
            </para>
            </remarks>
        </member>
        <member name="P:InTheHand.Net.Bluetooth.Msft.WindowsBluetoothDeviceInfo.Rssi">
            <summary>
            Returns the signal strength for the Bluetooth connection with the peer device.
            <para><b>Requires Windows Mobile 5.0 or Windows Embedded CE 6.0</b></para>
            </summary>
            -
            <value>Valid values for this property are -128 to 128.  It returns
            <see cref="F:System.Int32.MinValue">Int32.MinValue</see> on failure.
            </value>
            -
            <remarks>
            <para>This method requires an open connection to the peer device.
            If there is no active connection, then it will attempt to create one.
            </para>
            <note type="caution">Requires Windows Mobile 5.0 or Windows Embedded CE 6.0</note>
            <para>As well as the &#x2018;no connection&#x2019; issue, the native method
            on which the property depends is only present in later OS versions, so it 
            will fail on earlier devices.
            </para>
            </remarks>
        </member>
        <member name="P:InTheHand.Net.Bluetooth.Msft.WindowsBluetoothDeviceInfo.InstalledServices">
            <summary>
            Returns a list of services which are already installed for use on the calling machine.
            </summary>
            <remarks>
            <para>This property returns the services already configured for use. 
            Those are the ones that are checked in the &#x201C;Services&#x201D; tab
            of the device&#x2019;s property sheet in the Bluetooth Control panel.
            I presume the behaviour is similar on CE.
            </para>
            <para>Will only return available services for paired devices.
            </para>
            <para>It of course will also only returns standard system services which Windows understands.
            (On desktop Windows this method calls the OS function <c>BluetoothEnumerateInstalledServices</c>).
            </para>
            <para>To see all the services that a device advertises use the 
            <see cref="M:InTheHand.Net.Sockets.BluetoothDeviceInfo.GetServiceRecords(System.Guid)"/>
            method.
            </para>
            </remarks>
        </member>
        <member name="P:InTheHand.Net.Bluetooth.Msft.WindowsBluetoothDeviceInfo.Connected">
            <summary>
            Specifies whether the device is connected.
            </summary>
            <remarks>Not supported under Windows CE and will always return false.</remarks>
            <seealso cref="P:InTheHand.Net.Bluetooth.Msft.WindowsBluetoothDeviceInfo.Remembered"/>
            <seealso cref="P:InTheHand.Net.Bluetooth.Msft.WindowsBluetoothDeviceInfo.Authenticated"/>
        </member>
        <member name="P:InTheHand.Net.Bluetooth.Msft.WindowsBluetoothDeviceInfo.Remembered">
            <summary>
            Specifies whether the device is a remembered device. Not all remembered devices are authenticated.
            </summary>
            -
            <remarks>Now supported under Windows CE — will return the same as 
            <see cref="P:InTheHand.Net.Sockets.BluetoothDeviceInfo.Authenticated"/>.
            </remarks>
            <seealso cref="P:InTheHand.Net.Bluetooth.Msft.WindowsBluetoothDeviceInfo.Connected"/>
            <seealso cref="P:InTheHand.Net.Bluetooth.Msft.WindowsBluetoothDeviceInfo.Authenticated"/>
        </member>
        <member name="P:InTheHand.Net.Bluetooth.Msft.WindowsBluetoothDeviceInfo.Authenticated">
            <summary>
            Specifies whether the device is authenticated, paired, or bonded. All authenticated devices are remembered.
            </summary>
            <remarks>Is now supported on both CE and XP.</remarks>
            <seealso cref="P:InTheHand.Net.Bluetooth.Msft.WindowsBluetoothDeviceInfo.Connected"/>
            <seealso cref="P:InTheHand.Net.Bluetooth.Msft.WindowsBluetoothDeviceInfo.Remembered"/>
        </member>
        <member name="T:InTheHand.Net.Bluetooth.BlueZ.Structs.rfcomm_conninfo">
            <summary>
            Use with so_RFCOMM_CONNINFO.
            </summary>
        </member>
        <member name="T:InTheHand.Net.BluetoothAddress">
            <summary>
            Represents a Bluetooth device address.
            </summary>
            <remarks>The BluetoothAddress class contains the address of a bluetooth device.</remarks>
        </member>
        <member name="F:InTheHand.Net.BluetoothAddress.IacFirst">
            <summary>
            
            </summary>
        </member>
        <member name="F:InTheHand.Net.BluetoothAddress.IacLast">
            <summary>
            
            </summary>
        </member>
        <member name="F:InTheHand.Net.BluetoothAddress.Liac">
            <summary>
            Limited Inquiry Access Code.
            </summary>
        </member>
        <member name="F:InTheHand.Net.BluetoothAddress.Giac">
            <summary>
            General Inquire Access Code.
            The default inquiry code which is used to discover all devices in range.
            </summary>
        </member>
        <member name="M:InTheHand.Net.BluetoothAddress.#ctor(System.Int64)">
            <summary>
            Initializes a new instance of the <see cref="T:InTheHand.Net.BluetoothAddress"/> class with the specified address.
            </summary>
            <param name="address"><see cref="T:System.Int64"/> representation of the address.</param>
        </member>
        <member name="M:InTheHand.Net.BluetoothAddress.#ctor(System.Byte[])">
            <summary>
            Initializes a new instance of the <see cref="T:InTheHand.Net.BluetoothAddress"/> class with the specified address.
            </summary>
            -
            <remarks>
            <para>Note: The address should be supplied in little-endian order on the
            current Windows platform (which is little-endian).
            For forward compatibility it would be safer to use the 
            <see cref="M:InTheHand.Net.BluetoothAddress.Parse(System.String)"/> method, 
            which will be correct for all platforms.
            Or consider
            <see cref="M:InTheHand.Net.BluetoothAddress.CreateFromLittleEndian(System.Byte[])"/>
            or 
            <see cref="M:InTheHand.Net.BluetoothAddress.CreateFromBigEndian(System.Byte[])"/>.
            
            </para>
            </remarks>
            -
            <param name="address">Address as 6 byte array.</param>
            <exception cref="T:System.ArgumentNullException">address passed was <see langword="null"/>.</exception>
            <exception cref="T:System.ArgumentException">address passed was not a 6 byte array.</exception>
        </member>
        <member name="M:InTheHand.Net.BluetoothAddress.CreateFromBigEndian(System.Byte[])">
            <summary>
            Create a <see cref="T:InTheHand.Net.BluetoothAddress"/> from an Array of <see cref="T:System.Byte"/>
            where the array is in standard order.
            </summary>
            -
            <remarks>
            <para>Different protocol stacks have different ways of storing a
            Bluetooth Address.   Some use an array of bytes e.g. "byte[6]",
            which means that the first byte of the address comes first in
            memory (which we&#x2019;ll call big-endian format).  Others
            e.g. the Microsoft stack use a long integer (e.g. uint64) which
            means that the *last* byte of the address come comes first in
            memory (which we&#x2019;ll call little-endian format)
            </para>
            <para>This method creates an address for the first form.
            See <see cref="M:InTheHand.Net.BluetoothAddress.CreateFromLittleEndian(System.Byte[])"/> for the second form.
            </para>
            </remarks>
            -
            <param name="address">An Array of <see cref="T:System.Byte"/>
            with the Bluetooth Address ordered as described above.
            </param>
            -
            <returns>The resultant <see cref="T:InTheHand.Net.BluetoothAddress"/>.
            </returns>
            -
            <seealso cref="M:InTheHand.Net.BluetoothAddress.CreateFromLittleEndian(System.Byte[])"/>
        </member>
        <member name="M:InTheHand.Net.BluetoothAddress.CreateFromLittleEndian(System.Byte[])">
            <summary>
            Create a <see cref="T:InTheHand.Net.BluetoothAddress"/> from an Array of <see cref="T:System.Byte"/>
            where the array is in reverse order.
            </summary>
            -
            <remarks>
            <para>Different protocol stacks have different ways of storing a
            Bluetooth Address.   Some use an array of bytes e.g. "byte[6]",
            which means that the first byte of the address comes first in
            memory (which we&#x2019;ll call big-endian format).  Others
            e.g. the Microsoft stack use a long integer (e.g. uint64) which
            means that the *last* byte of the address come comes first in
            memory (which we&#x2019;ll call little-endian format)
            </para>
            <para>This method creates an address for the second form.
            See <see cref="M:InTheHand.Net.BluetoothAddress.CreateFromLittleEndian(System.Byte[])"/> for the first form.
            </para>
            </remarks>
            -
            <param name="address">An Array of <see cref="T:System.Byte"/>
            with the Bluetooth Address ordered as described above.
            </param>
            -
            <returns>The resultant <see cref="T:InTheHand.Net.BluetoothAddress"/>.
            </returns>
            -
            <seealso cref="M:InTheHand.Net.BluetoothAddress.CreateFromBigEndian(System.Byte[])"/>
        </member>
        <member name="M:InTheHand.Net.BluetoothAddress.TryParse(System.String,InTheHand.Net.BluetoothAddress@)">
            <summary>
            Converts the string representation of an address to it's <see cref="T:InTheHand.Net.BluetoothAddress"/> equivalent.
            A return value indicates whether the operation succeeded.
            </summary>
            <param name="bluetoothString">A string containing an address to convert.</param>
            <param name="result">When this method returns, contains the <see cref="T:InTheHand.Net.BluetoothAddress"/> equivalent to the address contained in s, if the conversion succeeded, or null (Nothing in Visual Basic) if the conversion failed.
            The conversion fails if the s parameter is null or is not of the correct format.</param>
            <returns>true if s is a valid Bluetooth address; otherwise, false.</returns>
        </member>
        <member name="M:InTheHand.Net.BluetoothAddress.Parse(System.String)">
            <summary>
            Converts the string representation of a Bluetooth address to a new <see cref="T:InTheHand.Net.BluetoothAddress"/> instance.
            </summary>
            <param name="bluetoothString">A string containing an address to convert.</param>
            <returns>New <see cref="T:InTheHand.Net.BluetoothAddress"/> instance.</returns>
            <remarks>Address must be specified in hex format optionally separated by the colon or period character e.g. 000000000000, 00:00:00:00:00:00 or 00.00.00.00.00.00.</remarks>
            <exception cref="T:System.ArgumentNullException">bluetoothString is null.</exception>
            <exception cref="T:System.FormatException">bluetoothString is not a valid Bluetooth address.</exception>
        </member>
        <member name="M:InTheHand.Net.BluetoothAddress.ToByteArray">
            <summary>
            Returns the value as a byte array.
            </summary>
            -
            <remarks>In previous versions this returned the internal array, it now
            returns a copy.  Addresses should be immutable, particularly for the
            None const!
            </remarks>
            -
            <returns>An array of byte</returns>
        </member>
        <member name="M:InTheHand.Net.BluetoothAddress.ToByteArrayLittleEndian">
            <summary>
            Returns the value as a byte array,
            where the array is in reverse order.
            </summary>
            -
            <remarks>
            <para>See <see cref="M:InTheHand.Net.BluetoothAddress.CreateFromBigEndian(System.Byte[])"/> for discussion of
            different stack#x2019;s storage formats for Bluetooth Addresses.
            </para>
            <para>In previous versions this returned the internal array, it now
            returns a copy.  Addresses should be immutable, particularly for the
            None const!
            </para>
            </remarks>
            -
            <returns>An array of byte of length six representing the Bluetooth address.</returns>
        </member>
        <member name="M:InTheHand.Net.BluetoothAddress.ToByteArrayBigEndian">
            <summary>
            Returns the value as a byte array,
            where the array is in standard order.
            </summary>
            -
            <remarks>
            <para>See <see cref="M:InTheHand.Net.BluetoothAddress.CreateFromBigEndian(System.Byte[])"/> for discussion of
            different stack#x2019;s storage formats for Bluetooth Addresses.
            </para>
            <para>In previous versions this returned the internal array, it now
            returns a copy.  Addresses should be immutable, particularly for the
            None const!
            </para>
            </remarks>
            -
            <returns>An array of byte of length six representing the Bluetooth address.</returns>
        </member>
        <member name="M:InTheHand.Net.BluetoothAddress.ToInt64">
            <summary>
            Returns the Bluetooth address as a long integer.
            </summary>
            -
            <returns>An <see cref="T:System.Int64"/>.</returns>
        </member>
        <member name="M:InTheHand.Net.BluetoothAddress.Equals(System.Object)">
            <summary>
            Compares two <see cref="T:InTheHand.Net.BluetoothAddress"/> instances for equality.
            </summary>
            -
            <param name="obj">The <see cref="T:InTheHand.Net.BluetoothAddress"/>
            to compare with the current instance.
            </param>
            -
            <returns><c>true</c> if <paramref name="obj"/>
            is a <see cref="T:InTheHand.Net.BluetoothAddress"/> and equal to the current instance;
            otherwise, <c>false</c>.
            </returns>
        </member>
        <member name="M:InTheHand.Net.BluetoothAddress.GetHashCode">
            <summary>
            Returns the hash code for this instance.
            </summary>
            <returns>A hash code for the current object.</returns>
        </member>
        <member name="M:InTheHand.Net.BluetoothAddress.op_Equality(InTheHand.Net.BluetoothAddress,InTheHand.Net.BluetoothAddress)">
            <summary>
            Returns an indication whether the values of two specified <see cref="T:InTheHand.Net.BluetoothAddress"/> objects are equal.<para><b>New in v1.5</b></para>
            </summary>
            -
            <param name="x">A <see cref="T:InTheHand.Net.BluetoothAddress"/> or <see langword="null"/>.</param>
            <param name="y">A <see cref="T:InTheHand.Net.BluetoothAddress"/> or <see langword="null"/>.</param>
            -
            <returns><c>true</c> if the values of the two instance are equal;
            otherwise, <c>false</c>.
            </returns>
        </member>
        <member name="M:InTheHand.Net.BluetoothAddress.op_Inequality(InTheHand.Net.BluetoothAddress,InTheHand.Net.BluetoothAddress)">
            <summary>
            Returns an indication whether the values of two specified <see cref="T:InTheHand.Net.BluetoothAddress"/> objects are not equal.
            </summary>
            -
            <param name="x">A <see cref="T:InTheHand.Net.BluetoothAddress"/> or <see langword="null"/>.</param>
            <param name="y">A <see cref="T:InTheHand.Net.BluetoothAddress"/> or <see langword="null"/>.</param>
            -
            <returns><c>true</c> if the value of the two instance is different;
            otherwise, <c>false</c>.
            </returns>
        </member>
        <member name="M:InTheHand.Net.BluetoothAddress.ToString">
            <summary>
            Converts the address to its equivalent string representation.
            </summary>
            <returns>The string representation of this instance.</returns>
            <remarks>The default return format is without a separator character 
            - use the <see cref="M:InTheHand.Net.BluetoothAddress.ToString(System.String)"/>
            overload for more formatting options.</remarks>
        </member>
        <member name="M:InTheHand.Net.BluetoothAddress.ToString(System.String)">
            <summary>
            Returns a <see cref="T:System.String"/> representation of the value of this <see cref="T:InTheHand.Net.BluetoothAddress"/> instance, according to the provided format specifier.
            </summary>
            <param name="format">A single format specifier that indicates how to format the value of this address.
            The format parameter can be "N", "C", or "P".
            If format is null or the empty string (""), "N" is used.</param>
            <returns>A <see cref="T:System.String"/> representation of the value of this <see cref="T:InTheHand.Net.BluetoothAddress"/>.</returns>
            <remarks><list type="table">
            <listheader><term>Specifier</term><term>Format of Return Value </term></listheader>
            <item><term>N</term><term>12 digits: <para>XXXXXXXXXXXX</para></term></item>
            <item><term>C</term><term>12 digits separated by colons: <para>XX:XX:XX:XX:XX:XX</para></term></item>
            <item><term>P</term><term>12 digits separated by periods: <para>XX.XX.XX.XX.XX.XX</para></term></item>
            </list></remarks>
        </member>
        <member name="F:InTheHand.Net.BluetoothAddress.None">
            <summary>
            Provides a null Bluetooth address.
            </summary>
        </member>
        <member name="M:InTheHand.Net.BluetoothAddress.ToString(System.String,System.IFormatProvider)">
            <summary>
            Returns a <see cref="T:System.String"/> representation of the value of this 
            <see cref="T:InTheHand.Net.BluetoothAddress"/> instance, according to the provided format specifier.
            </summary>
            -
            <param name="format">A single format specifier that indicates how to format the value of this Address.
            See <see cref="M:InTheHand.Net.BluetoothAddress.ToString(System.String)"/>
            for the possible format strings and their output.
            </param>
            <param name="formatProvider">Ignored.
            </param>
            -
            <returns>A <see cref="T:System.String"/> representation of the value of this
            <see cref="T:InTheHand.Net.BluetoothAddress"/>.
            </returns>
            -
            <remarks>See <see cref="M:InTheHand.Net.BluetoothAddress.ToString(System.String)"/>
            for the possible format strings and their output.
            </remarks>
        </member>
        <member name="M:InTheHand.Net.BluetoothAddress.Clone">
            <summary>
            Creates a copy of the <see cref="T:InTheHand.Net.BluetoothAddress"/>.
            </summary>
            <remarks>Creates a copy including of the internal byte array.
            </remarks>
            <returns>A copy of the <see cref="T:InTheHand.Net.BluetoothAddress"/>.
            </returns>
        </member>
        <member name="P:InTheHand.Net.BluetoothAddress.Sap">
            <summary>
            Significant address part.
            </summary>
        </member>
        <member name="P:InTheHand.Net.BluetoothAddress.Nap">
            <summary>
            Non-significant address part.
            </summary>
        </member>
        <member name="T:InTheHand.Net.Bluetooth.BluetoothProtocolDescriptorType">
            <summary>
            Configures what type of element will be added by the <see cref="T:InTheHand.Net.Bluetooth.ServiceRecordBuilder"/>
            for the <see cref="F:InTheHand.Net.Bluetooth.AttributeIds.UniversalAttributeId.ProtocolDescriptorList"/> 
            attribute.
            </summary>
            -
            <remarks><para>Used with the <see cref="P:InTheHand.Net.Bluetooth.ServiceRecordBuilder.ProtocolType"/>
            property.
            </para>
            </remarks>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothProtocolDescriptorType.None">
            <summary>
            No PDL attribute will be added.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothProtocolDescriptorType.L2Cap">
            <summary>
            A standard L2CAP element will be added.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothProtocolDescriptorType.Rfcomm">
            <summary>
            A standard RFCOMM element will be added.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothProtocolDescriptorType.GeneralObex">
            <summary>
            A standard GOEP (OBEX) element will be added.
            </summary>
        </member>
        <member name="T:InTheHand.Net.Bluetooth.HciVersion">
            <summary>
            HCI_Version &#x2014; Assigned Numbers &#x2014; Host Controller Interface
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.HciVersion.v1_0_b">
            <summary>
            Bluetooth Core Specification 1.0b
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.HciVersion.v1_1">
            <summary>
            Bluetooth Core Specification 1.1
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.HciVersion.v1_2">
            <summary>
            Bluetooth Core Specification 1.2
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.HciVersion.v2_0wEdr">
            <summary>
            Bluetooth Core Specification 2.0 + EDR
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.HciVersion.v2_1wEdr">
            <summary>
            Bluetooth Core Specification 2.1 + EDR
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.HciVersion.v3_0wHS">
            <summary>
            Bluetooth Core Specification 3.0 + HS
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.HciVersion.v4_0">
            <summary>
            Bluetooth Core Specification 4.0
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.HciVersion.Unknown">
            <summary>
            Unknown version &#x2104; probably the stack API
            does not provide the value.
            </summary>
        </member>
        <member name="T:InTheHand.Net.Bluetooth.LmpVersion">
            <summary>
            LMP VerNr &#x2014; Assigned Numbers &#x2014; Link Manager Protocol
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.LmpVersion.v1_0_b">
            <summary>
            Bluetooth Core Specification 1.0b
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.LmpVersion.v1_1">
            <summary>
            Bluetooth Core Specification 1.1
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.LmpVersion.v1_2">
            <summary>
            Bluetooth Core Specification 1.2
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.LmpVersion.v2_0wEdr">
            <summary>
            Bluetooth Core Specification 2.0 + EDR
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.LmpVersion.v2_1wEdr">
            <summary>
            Bluetooth Core Specification 2.1 + EDR
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.LmpVersion.v3_0wHS">
            <summary>
            Bluetooth Core Specification 3.0 + HS
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.LmpVersion.v4_0">
            <summary>
            Bluetooth Core Specification 4.0
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.LmpVersion.Unknown">
            <summary>
            Unknown version &#x2104; probably the stack API
            does not provide the value.
            </summary>
        </member>
        <member name="T:InTheHand.Net.Bluetooth.BluetoothSecurity">
            <summary>
            Handles security between bluetooth devices.
            </summary>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.BluetoothSecurity.PairRequest(InTheHand.Net.BluetoothAddress,System.String)">
            <summary>
            Intiates pairing for a remote device.
            </summary>
            <param name="device">Remote device with which to pair.</param>
            <param name="pin">Chosen PIN code, must be between 1 and 16 ASCII characters.
            Or <c>null</c> to initiate pairing to be handled for instance by
            <see cref="T:InTheHand.Net.Bluetooth.BluetoothWin32Authentication"/>.
            </param>
            -
            <remarks>
            <para>These days most devices are using Bluetooth version 2.1's 
            Secure Simple Pairing (SSP) which does not use a PIN code. So instead use this
            function only to initiate pairing by passing <c>null</c> as <paramref name="pin"/>.
            To handle pairing, at least on desktop Windows with the Microsoft Bluetooth stack,
            use class <see cref="T:InTheHand.Net.Bluetooth.BluetoothWin32Authentication"/>
            and respond to the pairing callback method as required; for most of the SSP
            pairing methods that is to set <see cref="P:InTheHand.Net.Bluetooth.BluetoothWin32AuthenticationEventArgs.Confirm">BluetoothWin32AuthenticationEventArgs.Confirm</see>
            to <c>true</c>, and for traditional pairing instead set <see cref="P:InTheHand.Net.Bluetooth.BluetoothWin32AuthenticationEventArgs.Pin">BluetoothWin32AuthenticationEventArgs.Pin</see>
            to the PIN code.
            </para>
            <para>On Windows CE platforms this calls <c>BthPairRequest</c>,
            its MSDN remarks say:
            </para>
            <para>&#x201C;BthPairRequest passes the parameters to the <c>BthSetPIN</c>
            function and creates an ACL connection. Once the connection is established,
            it calls the <c>BthAuthenticate</c> function to authenticate the device.&#x201D;
            </para>
            <para>On Windows XP/Vista platforms this calls <c>BluetoothAuthenticateDevice</c>.
            If the pin argument is set to null pairing is initiated and if 
            there is no instance of class <see cref="T:InTheHand.Net.Bluetooth.BluetoothWin32Authentication"/>
            then a Wizard is displayed to accept a PIN from the user.
            </para>
            <para>See also 
            <see cref="M:InTheHand.Net.Bluetooth.BluetoothSecurity.SetPin(InTheHand.Net.BluetoothAddress,System.String)"/>
            </para>
            </remarks>
            <returns>Whether the operation was successful.</returns>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.BluetoothSecurity.RemoveDevice(InTheHand.Net.BluetoothAddress)">
            <summary>
            Remove the pairing with the specified device
            </summary>
            -
            <param name="device">Remote device with which to remove pairing.</param>
            -
            <returns>TRUE if device was successfully removed, else FALSE.</returns>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.BluetoothSecurity.SetPin(InTheHand.Net.BluetoothAddress,System.String)">
            <summary>
            This function stores the personal identification number (PIN) for the Bluetooth device.
            </summary>
            <param name="device">Address of remote device.</param>
            <param name="pin">Pin, alphanumeric string of between 1 and 16 ASCII characters.</param>
            <remarks><para>On Windows CE platforms this calls <c>BthSetPIN</c>,
            its MSDN remarks say:
            </para>
            <para>&#x201C;Stores the pin for the Bluetooth device identified in pba.
            The active connection to the device is not necessary, nor is the presence
            of the Bluetooth controller. The PIN is persisted in the registry until
            BthRevokePIN is called.
            </para>
            <para>&#x201C;While the PIN is stored, it is supplied automatically
            after the PIN request is issued by the authentication mechanism, so the
            user will not be prompted for it. Typically, for UI-based devices, you
            would set the PIN for the duration of authentication, and then revoke
            it after authentication is complete.&#x201D;
            </para>
            <para>See also 
            <see cref="M:InTheHand.Net.Bluetooth.BluetoothSecurity.RevokePin(InTheHand.Net.BluetoothAddress)"/>
            </para>
            </remarks>
            <returns>True on success, else False.</returns>
            <seealso cref="M:InTheHand.Net.Bluetooth.BluetoothSecurity.RevokePin(InTheHand.Net.BluetoothAddress)"/>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.BluetoothSecurity.RevokePin(InTheHand.Net.BluetoothAddress)">
            <summary>
            This function revokes the personal identification number (PIN) for the Bluetooth device.
            </summary>
            <remarks><para>On Windows CE platforms this calls <c>BthRevokePIN</c>,
            its MSDN remarks say:
            </para>
            <para>&#x201C;When the PIN is revoked, it is removed from registry.
            The active connection to the device is not necessary, nor is the presence
            of the Bluetooth controller.&#x201D;
            </para>
            <para>On Windows CE platforms this removes any pending BluetoothWin32Authentication object but does not remove the PIN for an already authenticated device.
            Use RemoveDevice to ensure a pairing is completely removed.</para>
            <para>See also 
            <see cref="M:InTheHand.Net.Bluetooth.BluetoothSecurity.SetPin(InTheHand.Net.BluetoothAddress,System.String)"/>
            </para>
            </remarks>
            <param name="device">The remote device.</param>
            <returns>True on success, else False.</returns>
            <seealso cref="M:InTheHand.Net.Bluetooth.BluetoothSecurity.SetPin(InTheHand.Net.BluetoothAddress,System.String)"/>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.BluetoothSecurity.SetLinkKey(InTheHand.Net.BluetoothAddress,System.Guid)">
            <summary>
            <para><b>Not supported on Windows XP</b></para>
            </summary>
            -
            <param name="device">The device whose Link Key to retrieve.</param>
            <param name="linkKey">The 16-byte Link Key to set.</param>
            -
            <returns><c>true</c> if the operation was successful; <c>false</c> otherwise.</returns>
            -
            <remarks><para>On Windows CE platforms this calls <c>BthSetLinkKey</c>,
            its MSDN remarks say:
            </para>
            <para>&#x201C;The link key is persisted in registry until <c>BthRevokeLinkKey</c>
            is called.
            </para>
            <para>&#x201C;Typically, the Bluetooth stack manages link keys automatically,
            for example, it stores them when they are created. This function is useful
            primarily for backup purposes.
            </para>
            <para>&#x201C;While link key is stored, it will be automatically supplied
            once the link key request is issued by the authentication mechanism. If
            the link key is incorrect, the renegotiation that involves the PIN is
            initiated by the Bluetooth adapter, and the PIN code may be requested
            from the user.
            </para>
            <para>&#x201C;The link key length is 16 bytes. You cannot create link
            keys; they are generated by the Bluetooth hardware.&#x201D;
            </para>
            </remarks>
            <returns></returns>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.BluetoothSecurity.GetPinRequest">
            <summary>
            Retrieves the address of the Bluetooth peer device authentication that requires the PIN code.
            <para><b>Not supported on Windows XP</b></para>
            </summary>
            <remarks><para>On Windows CE platforms this calls <c>BthGetPINRequest</c>,
            its MSDN remarks say:
            </para>
            <para>“There can be multiple requests outstanding. After the event
            that is provided by the UI handler is signaled, the UI handler must call
            this function multiple times until the call fails.”
            </para>
            <para>See also 
            <see cref="M:InTheHand.Net.Bluetooth.BluetoothSecurity.RefusePinRequest(InTheHand.Net.BluetoothAddress)"/>
            and <see cref="M:InTheHand.Net.Bluetooth.BluetoothSecurity.AnswerPinRequest(InTheHand.Net.BluetoothAddress,System.String)"/>
            </para>
            </remarks>
            <returns><see cref="T:InTheHand.Net.BluetoothAddress"/> of the remote device, or null if there is no outstanding PIN request.</returns>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.BluetoothSecurity.RefusePinRequest(InTheHand.Net.BluetoothAddress)">
            <summary>
            Refuses an outstanding PIN request.
            <para><b>Not supported on Windows XP</b></para>
            </summary>
            -
            <param name="device">Address of the requesting device.</param>
            -
            <returns><c>true</c> if the operation was successful; <c>false</c> otherwise.</returns>
            -
            <remarks><para>On Windows CE platforms this calls <c>BthRefusePINRequest</c>,
            its MSDN remarks say:
            </para>
            <para>&#x201C;This function refuses an outstanding PIN request that is
            retrieved by <see cref="M:InTheHand.Net.Bluetooth.BluetoothSecurity.GetPinRequest"/>
            function.&#x201D;
            </para>
            <para>See also 
            <see cref="M:InTheHand.Net.Bluetooth.BluetoothSecurity.GetPinRequest"/>
            and <see cref="M:InTheHand.Net.Bluetooth.BluetoothSecurity.AnswerPinRequest(InTheHand.Net.BluetoothAddress,System.String)"/>
            </para>
            </remarks>
        </member>
        <member name="T:InTheHand.Net.Bluetooth.BluetoothDeviceInfoProperties">
            <summary>
            Specifies properties of a remote Bluetooth Device.
            </summary>
            -
            -
            <remarks>
            <para>Supported only by the Microsoft stack on desktop Windows.
            </para>
            <para>Originally from Win32 "bthdef.h" and used by struct
            BTH_DEVICE_INFO.flags. The flags are named BDIF_**.
            </para>
            </remarks>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothDeviceInfoProperties.Address">
            <summary>
            The address member contains valid data.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothDeviceInfoProperties.Cod">
            <summary>
            The classOfDevice member contains valid data.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothDeviceInfoProperties.Name">
            <summary>
            The name member contains valid data.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothDeviceInfoProperties.Paired">
            <summary>
            The device is a remembered and authenticated device.
            The BDIF_PERSONAL flag is always set when this flag is set.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothDeviceInfoProperties.Personal">
            <summary>
            The device is a remembered device. If this flag is set and
            the BDIF_PAIRED flag is not set, the device is not authenticated.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothDeviceInfoProperties.Connected">
            <summary>
            The remote Bluetooth device is currently connected to the local radio.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothDeviceInfoProperties.ShortName">
            <summary>
            [Vista SP1]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothDeviceInfoProperties.Eir">
            <summary>
            
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothDeviceInfoProperties.BR">
            <summary>
            Bluetooth Basic Rate &#x2014; i.e. traditional Bluetooth [Windows 8]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothDeviceInfoProperties.LE">
            <summary>
            Bluetooth Low Energy
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.Widcomm.L2CapPort.L2CapDisconnectReason.XXPending">
            <summary>
            Presumably this is surfaced as a OnConnectionPending
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BlueSoleil.BtSdkError.NO_SERVICE">
            <summary>
            &#x201C;No service record with the specified search pattern is found on the remote device.&#x201D;
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BlueSoleil.BtSdkError.SERVICE_RECORD_NOT_EXIST">
            <summary>
            &#x201C;The specified service record does not exist on the remote device..&#x201D;
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BlueSoleil.BtSdkError.PAGE_TIMEOUT">
            <summary>
            &#x201C;HCI error &#x201C;Page Timeout (0X04)&#x201D; is received.&#x201D;
            </summary>
        </member>
        <member name="T:InTheHand.Net.Sockets.BluetoothListener">
            <summary>
            Listens for connections from Bluetooth RFCOMM network clients.
            </summary>
            <remarks>
            <para>The <see cref="T:InTheHand.Net.Sockets.BluetoothListener"/> class provides simple methods 
            that listen for and accept incoming connection requests.  New connections 
            are returned as <see cref="T:InTheHand.Net.Sockets.BluetoothClient"/> instances 
            (on Microsoft Bluetooth stack platforms alone a new <see cref="T:System.Net.Sockets.Socket"/> 
            instance can be returned for new connections).
            </para>
            <para>In the normal case a the listener is initialised with a 
            <see cref="T:System.Guid"/> holding the Service Class Id on which it is 
            to accept connections, the listener will automatically create a SDP 
            Service Record containg that Service Class Id and the port number
            (RFCOMM Service Channel Number) that it has started listening on.
            The standard usage is thus as follows.
            </para>
            <code lang="VB.NET">
            Class MyConsts
              Shared ReadOnly MyServiceUuid As Guid _
                = New Guid("{00112233-4455-6677-8899-aabbccddeeff}")
            End Class
            
              ...
              Dim lsnr As New BluetoothListener(MyConsts.MyServiceUuid)
              lsnr.Start()
              ' Now accept new connections, perhaps using the thread pool to handle each
              Dim conn As New BluetoothClient = lsnr.AcceptBluetoothClient()
              Dim peerStream As Stream = conn.GetStream()
              ...
            </code>
            <para>One can also pass the BluetoothListener a Service Name (v2.4), 
            a custom Service Record (Service Discovery Protocol record), and/or 
            set Class of Service bit(s). To create a custom Service Record use 
            <see cref="T:InTheHand.Net.Bluetooth.ServiceRecordBuilder"/>.
            </para>
            <para>There are overloads of the constructor which take a 
            <see cref="T:InTheHand.Net.BluetoothEndPoint"/> parameter instead of a 
            <see cref="T:System.Guid"/> as the Service Class Id, the Class Id
            value should be specified in that case in the endpoint.
            If the port value is specified in the endpoint, then the listener will 
            attempt to bind to that port locally.  The address in the endpoint is 
            largely ignored as no current stack supports more than one local radio.
            </para>
            <para>As of version 3.4 we catch an exception if it occurs on the new 
            port set-up and it is stored. That error will be returned to any subsequent 
            Accept; that is we assume that the error affects the listener completely 
            and so make no attempt to start a new port and all subsequent Accept 
            complete with the original error.
            </para>
            <para>In the Bluetopia case previously the 'one port at a time' error
            was unhandled and occurred on a background thread and therefore killed
            the application.  Now it is caught and returned to the next Accept.
            Even better the first Accept successfully returns back to the caller.
            So BluetoothListener is now usable to that extent: one connection can
            be accepted.  After that it needs to be discarded and a new server created.
            </para>
            </remarks>
        </member>
        <member name="M:InTheHand.Net.Sockets.BluetoothListener.#ctor(System.Guid)">
            <overloads>
            Initializes a new instance of the <see cref="T:InTheHand.Net.Sockets.BluetoothListener"/> class.
            </overloads>
            ----
            <summary>
            Initializes a new instance of the <see cref="T:InTheHand.Net.Sockets.BluetoothListener"/> class
            to listen on the specified service identifier.
            </summary>
            <param name="service">The Bluetooth service to listen for.</param>
            <remarks>
            <para>
            An SDP record is published on successful <see cref="M:InTheHand.Net.Sockets.BluetoothListener.Start"/>
            to advertise the server.
            A generic record is created, containing the essential <c>ServiceClassIdList</c>
            and <c>ProtocolDescriptorList</c> attributes.  The specified service identifier is
            inserted into the former, and the RFCOMM Channel number that the server is
            listening on is inserted into the latter.  See the Bluetooth SDP specification
            for details on the use and format of SDP records.
            </para><para>
            If a SDP record with more elements is required, then use
            one of the other constructors that takes an SDP record e.g. 
            <see cref="M:InTheHand.Net.Sockets.BluetoothListener.#ctor(System.Guid,InTheHand.Net.Bluetooth.ServiceRecord)"/>,
            or when passing it as a byte array 
            <see cref="M:InTheHand.Net.Sockets.BluetoothListener.#ctor(System.Guid,System.Byte[],System.Int32)"/>.
            The format of the generic record used here is shown there also.
            </para><para>
            Call the <see cref="M:InTheHand.Net.Sockets.BluetoothListener.Start"/> 
            method to begin listening for incoming connection attempts.
            </para>
            </remarks>
        </member>
        <member name="M:InTheHand.Net.Sockets.BluetoothListener.#ctor(InTheHand.Net.BluetoothAddress,System.Guid)">
            <summary>
            Initializes a new instance of the <see cref="T:InTheHand.Net.Sockets.BluetoothListener"/> class
            that listens for incoming connection attempts on the specified local Bluetooth address and service identifier. 
            </summary>
            <param name="localaddr">A <see cref="T:InTheHand.Net.BluetoothAddress"/> that represents the local Bluetooth radio address.</param>
            <param name="service">The Bluetooth service on which to listen for incoming connection attempts.</param>
            <remarks>
            <para>
            An SDP record is published on successful <see cref="M:InTheHand.Net.Sockets.BluetoothListener.Start"/>
            to advertise the server.
            A generic record is created, containing the essential <c>ServiceClassIdList</c>
            and <c>ProtocolDescriptorList</c> attributes.  The specified service identifier is
            inserted into the former, and the RFCOMM Channel number that the server is
            listening on is inserted into the latter.  See the Bluetooth SDP specification
            for details on the use and format of SDP records.
            </para><para>
            If a SDP record with more elements is required, then use
            one of the other constructors that takes an SDP record e.g. 
            <see cref="M:InTheHand.Net.Sockets.BluetoothListener.#ctor(InTheHand.Net.BluetoothAddress,System.Guid,InTheHand.Net.Bluetooth.ServiceRecord)"/>,
            or when passing it as a byte array, e.g. 
            <see cref="M:InTheHand.Net.Sockets.BluetoothListener.#ctor(InTheHand.Net.BluetoothAddress,System.Guid,System.Byte[],System.Int32)"/>.
            The format of the generic record used here is shown there also.
            </para><para>
            Call the <see cref="M:InTheHand.Net.Sockets.BluetoothListener.Start"/> 
            method to begin listening for incoming connection attempts.
            </para>
            </remarks>
        </member>
        <member name="M:InTheHand.Net.Sockets.BluetoothListener.#ctor(InTheHand.Net.BluetoothEndPoint)">
            <summary>
            Initializes a new instance of the <see cref="T:InTheHand.Net.Sockets.BluetoothListener"/> class
            with the specified local endpoint.
            </summary>
            -
            <param name="localEP">A <see cref="T:InTheHand.Net.BluetoothEndPoint"/> that represents 
            the local endpoint to which to bind the listener.
            See the <see cref="T:InTheHand.Net.Sockets.BluetoothListener"/> documentation for more information 
            on the usage of this argument.
            </param>
            -
            <remarks>
            <para>
            An SDP record is published on successful <see cref="M:InTheHand.Net.Sockets.BluetoothListener.Start"/>
            to advertise the server.
            A generic record is created, containing the essential <c>ServiceClassIdList</c>
            and <c>ProtocolDescriptorList</c> attributes.  The specified service identifier is
            inserted into the former, and the RFCOMM Channel number that the server is
            listening on is inserted into the latter.  See the Bluetooth SDP specification
            for details on the use and format of SDP records.
            </para><para>
            If a SDP record with more elements is required, then use
            one of the other constructors that takes an SDP record e.g. 
            <see cref="M:InTheHand.Net.Sockets.BluetoothListener.#ctor(InTheHand.Net.BluetoothEndPoint,InTheHand.Net.Bluetooth.ServiceRecord)"/>,
            or when passing it as a byte array
            <see cref="M:InTheHand.Net.Sockets.BluetoothListener.#ctor(InTheHand.Net.BluetoothEndPoint,System.Byte[],System.Int32)"/>.
            The format of the generic record used here is shown there also.
            </para><para>
            Call the <see cref="M:InTheHand.Net.Sockets.BluetoothListener.Start"/> 
            method to begin listening for incoming connection attempts.
            </para>
            </remarks>
        </member>
        <member name="M:InTheHand.Net.Sockets.BluetoothListener.#ctor(System.Guid,System.Byte[],System.Int32)">
            <summary>
            Initializes a new instance of the <see cref="T:InTheHand.Net.Sockets.BluetoothListener"/> class
            to listen on the specified service identifier, 
            publishing the specified SDP record.
            </summary>
            <param name="service">The Bluetooth service to listen for.</param>
            <param name="sdpRecord">Prepared SDP Record to publish.</param>
            <param name="channelOffset">
            The index in the <paramref name="sdpRecord"/> byte array where the RFCOMM Channel Number that the
            server is listening on is to be placed.
            However the supplied record is now parsed into an <see cref="T:InTheHand.Net.Bluetooth.ServiceRecord"/>
            instance, and the channel offset is not used.
            </param>
            <remarks>
            <note>
            The constructors taking the SDP record explicitly (as a byte array) should
            only be used if
            a specialized SDP record is required. For instance when using one of the
            standard profiles.  Otherwise use one of the other constructors 
            e.g. <see cref="M:InTheHand.Net.Sockets.BluetoothListener.#ctor(System.Guid)"/>
            which create a generic SDP Record from the specified service identifier.
            </note>
            <para>Instead of passing a byte array containing a hand-built record,
            the record can also be built using the <see cref="T:InTheHand.Net.Bluetooth.ServiceRecord"/>
            and <see cref="T:InTheHand.Net.Bluetooth.ServiceElement"/> classes, and
            passed to the respective constuctor, e.g.
            <see cref="M:InTheHand.Net.Sockets.BluetoothListener.#ctor(System.Guid,InTheHand.Net.Bluetooth.ServiceRecord)"/>
            </para>
            <para>Any useful SDP record will include 
            a <c>ProtocolDescriptor</c> element containing
            the RFCOMM Channel number that the server is listening on,
            and a <c>ServiceClassId</c> element containing the service UUIDs.
            The record supplied in the <paramref name="sdpRecord"/> parameter
            should contain those elements.  On successful <see cref="M:InTheHand.Net.Sockets.BluetoothListener.Start"/>,
            the RFCOMM Channel number that the protocol stack has assigned to the
            server is retrieved, and copied into the service record before it is
            published.  The <paramref name="channelOffset"/> indicates the location
            of the respective byte in the <paramref name="sdpRecord"/> byte array.
            </para>
            <para>
            An example SDP record is as follows.  This is actually the format of the 
            generic record used in the other constructors.  For another example see
            the code in the <c>ObexListener</c> class.
            <code>
            // The asterisks note where the Service UUID and the Channel number are
            // to be filled in.
            byte[] record = new byte[] {
              //Element Sequence:
              0x35,0x27,
                //UInt16: 0x0001  -- ServiceClassIdList
                0x09,0x00,0x01,
                //Element Sequence:
                0x35,0x11,
                //  UUID128: 00000000-0000-0000-0000-000000000000 -- * Service UUID
                    0x1c,
                      0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,
                      0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,
                //
                //UInt16: 0x0004  -- ProtocolDescriptorList
                0x09,0x00,0x04,
                //Element Sequence:
                0x35,0x0c,
                //  Element Sequence:
                    0x35,0x03,
                //      UUID16: 0x0100  -- L2CAP
                        0x19,0x01,0x00,
                //  Element Sequence:
                    0x35,0x05,
                //      UUID16: 0x0003  -- RFCOMM
                        0x19,0x00,0x03,
                //      UInt8: 0x00     -- * Channel Number
                        0x08,0x00
            };
            </code>
            For that record the <c>channelOffset</c> is 40.
            </para>
            </remarks>
        </member>
        <member name="M:InTheHand.Net.Sockets.BluetoothListener.#ctor(InTheHand.Net.BluetoothAddress,System.Guid,System.Byte[],System.Int32)">
            <summary>
            Initializes a new instance of the <see cref="T:InTheHand.Net.Sockets.BluetoothListener"/> class
            that listens for incoming connection attempts on the specified local Bluetooth address and service identifier,
            publishing the specified SDP record.
            </summary>
            <param name="localaddr">A <see cref="T:InTheHand.Net.BluetoothAddress"/> that represents the local Bluetooth radio address.</param>
            <param name="service">The Bluetooth service to listen for.</param>
            <param name="sdpRecord">Prepared SDP Record to publish</param>
            <param name="channelOffset">
            The index in the <paramref name="sdpRecord"/> byte array where the RFCOMM Channel Number that the
            server is listening on is to be placed.
            However the supplied record is now parsed into an <see cref="T:InTheHand.Net.Bluetooth.ServiceRecord"/>
            instance, and the channel offset is not used.
            </param>
            <remarks>
            <note>
            The constructors taking the SDP record explicitly (as a byte array) should
            only be used if
            a specialized SDP record is required. For instance when using one of the
            standard profiles.  Otherwise use one of the other constructors 
            e.g. <see cref="M:InTheHand.Net.Sockets.BluetoothListener.#ctor(InTheHand.Net.BluetoothAddress,System.Guid)"/>
            which create a generic SDP Record from the specified service identifier.
            </note>
            <para>Instead of passing a byte array containing a hand-built record,
            the record can also be built using the <see cref="T:InTheHand.Net.Bluetooth.ServiceRecord"/>
            and <see cref="T:InTheHand.Net.Bluetooth.ServiceElement"/> classes, and
            passed to the respective constuctor, e.g.
            <see cref="M:InTheHand.Net.Sockets.BluetoothListener.#ctor(InTheHand.Net.BluetoothAddress,System.Guid,InTheHand.Net.Bluetooth.ServiceRecord)"/>
            </para>
            <para>Any useful SDP record will include 
            a <c>ProtocolDescriptor</c> element containing
            the RFCOMM Channel number that the server is listening on,
            and a <c>ServiceClassId</c> element containing the service UUIDs.
            The record supplied in the <paramref name="sdpRecord"/> parameter
            should contain those elements.  On successful <see cref="M:InTheHand.Net.Sockets.BluetoothListener.Start"/>,
            the RFCOMM Channel number that the protocol stack has assigned to the
            server is retrieved, and copied into the service record before it is
            published.  The <paramref name="channelOffset"/> indicates the location
            of the respective byte in the <paramref name="sdpRecord"/> byte array.
            </para>
            <para>
            An example SDP record is as follows.  This is actually the format of the 
            generic record used in the other constructors.  For another example see
            the code in the <c>ObexListener</c> class.
            <code>
            // The asterisks note where the Service UUID and the Channel number are
            // to be filled in.
            byte[] record = new byte[] {
              //Element Sequence:
              0x35,0x27,
                //UInt16: 0x0001  -- ServiceClassIdList
                0x09,0x00,0x01,
                //Element Sequence:
                0x35,0x11,
                //  UUID128: 00000000-0000-0000-0000-000000000000 -- * Service UUID
                    0x1c,
                      0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,
                      0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,
                //
                //UInt16: 0x0004  -- ProtocolDescriptorList
                0x09,0x00,0x04,
                //Element Sequence:
                0x35,0x0c,
                //  Element Sequence:
                    0x35,0x03,
                //      UUID16: 0x0100  -- L2CAP
                        0x19,0x01,0x00,
                //  Element Sequence:
                    0x35,0x05,
                //      UUID16: 0x0003  -- RFCOMM
                        0x19,0x00,0x03,
                //      UInt8: 0x00     -- * Channel Number
                        0x08,0x00
            };
            </code>
            For that record the <c>channelOffset</c> is 40.
            </para>
            </remarks>
        </member>
        <member name="M:InTheHand.Net.Sockets.BluetoothListener.#ctor(InTheHand.Net.BluetoothEndPoint,System.Byte[],System.Int32)">
            <summary>
            Initializes a new instance of the <see cref="T:InTheHand.Net.Sockets.BluetoothListener"/> class
            with the specified local endpoint,
            publishing the specified SDP record.
            </summary>
            -
            <param name="localEP">A <see cref="T:InTheHand.Net.BluetoothEndPoint"/> that represents 
            the local endpoint to which to bind the listener.
            See the <see cref="T:InTheHand.Net.Sockets.BluetoothListener"/> documentation for more information 
            on the usage of this argument.
            </param>
            <param name="sdpRecord">Prepared SDP Record to publish</param>
            <param name="channelOffset">
            The index in the <paramref name="sdpRecord"/> byte array where the RFCOMM Channel Number that the
            server is listening on is to be placed.
            However the supplied record is now parsed into an <see cref="T:InTheHand.Net.Bluetooth.ServiceRecord"/>
            instance, and the channel offset is not used.
            </param>
            -
            <remarks>
            <note>
            The constructors taking the SDP record explicitly (as a byte array) should
            only be used if
            a specialized SDP record is required. For instance when using one of the
            standard profiles.  Otherwise use one of the other constructors 
            e.g. <see cref="M:InTheHand.Net.Sockets.BluetoothListener.#ctor(InTheHand.Net.BluetoothEndPoint)"/>
            which create a generic SDP Record from the specified service identifier.
            </note>
            <para>Instead of passing a byte array containing a hand-built record,
            the record can also be built using the <see cref="T:InTheHand.Net.Bluetooth.ServiceRecord"/>
            and <see cref="T:InTheHand.Net.Bluetooth.ServiceElement"/> classes, and
            passed to the respective constuctor, e.g.
            <see cref="M:InTheHand.Net.Sockets.BluetoothListener.#ctor(InTheHand.Net.BluetoothEndPoint,InTheHand.Net.Bluetooth.ServiceRecord)"/>
            </para>
            <para>Any useful SDP record will include 
            a <c>ProtocolDescriptor</c> element containing
            the RFCOMM Channel number that the server is listening on,
            and a <c>ServiceClassId</c> element containing the service UUIDs.
            The record supplied in the <paramref name="sdpRecord"/> parameter
            should contain those elements.  On successful <see cref="M:InTheHand.Net.Sockets.BluetoothListener.Start"/>,
            the RFCOMM Channel number that the protocol stack has assigned to the
            server is retrieved, and copied into the service record before it is
            published.  The <paramref name="channelOffset"/> indicates the location
            of the respective byte in the <paramref name="sdpRecord"/> byte array.
            </para>
            <para>
            An example SDP record is as follows.  This is actually the format of the 
            generic record used in the other constructors.  For another example see
            the code in the <c>ObexListener</c> class.
            <code>
            // The asterisks note where the Service UUID and the Channel number are
            // to be filled in.
            byte[] record = new byte[] {
              //Element Sequence:
              0x35,0x27,
                //UInt16: 0x0001  -- ServiceClassIdList
                0x09,0x00,0x01,
                //Element Sequence:
                0x35,0x11,
                //  UUID128: 00000000-0000-0000-0000-000000000000 -- * Service UUID
                    0x1c,
                      0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,
                      0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,
                //
                //UInt16: 0x0004  -- ProtocolDescriptorList
                0x09,0x00,0x04,
                //Element Sequence:
                0x35,0x0c,
                //  Element Sequence:
                    0x35,0x03,
                //      UUID16: 0x0100  -- L2CAP
                        0x19,0x01,0x00,
                //  Element Sequence:
                    0x35,0x05,
                //      UUID16: 0x0003  -- RFCOMM
                        0x19,0x00,0x03,
                //      UInt8: 0x00     -- * Channel Number
                        0x08,0x00
            };
            </code>
            For that record the <c>channelOffset</c> is 40.
            </para>
            </remarks>
        </member>
        <member name="M:InTheHand.Net.Sockets.BluetoothListener.#ctor(System.Guid,InTheHand.Net.Bluetooth.ServiceRecord)">
            <summary>
            Initializes a new instance of the <see cref="T:InTheHand.Net.Sockets.BluetoothListener"/> class
            to listen on the specified service identifier, 
            publishing the specified SDP record.
            </summary>
            -
            <param name="service">The Bluetooth service to listen for.</param>
            <param name="sdpRecord">Prepared SDP Record to publish.</param>
            -
            <remarks>
            <note>
            The constructors taking the SDP record explicitly should
            only be used if
            a specialized SDP record is required. For instance when using one of the
            standard profiles.  Otherwise use one of the other constructors 
            e.g. <see cref="M:InTheHand.Net.Sockets.BluetoothListener.#ctor(System.Guid)"/>
            which create a generic SDP Record from the specified service identifier.
            </note>
            <para>Any useful SDP record will include 
            a <c>ProtocolDescriptor</c> element containing
            the RFCOMM Channel number that the server is listening on,
            and a <c>ServiceClassId</c> element containing the service UUIDs.
            The record supplied in the <paramref name="sdpRecord"/> parameter
            should contain those elements.  On successful <see cref="M:InTheHand.Net.Sockets.BluetoothListener.Start"/>,
            the RFCOMM Channel number that the protocol stack has assigned to the
            server is retrieved, and copied into the service record before it is
            published.
            </para>
            <para>
            An example SDP record is as follows.  This is actually the format of the 
            generic record used in the other constructors.  For another example see
            the code in the <c>ObexListener</c> class.
            <code lang="C#">
            private static ServiceRecord CreateBasicRfcommRecord(Guid serviceClassUuid)
            {
                ServiceElement pdl = ServiceRecordHelper.CreateRfcommProtocolDescriptorList();
                ServiceElement classList = new ServiceElement(ElementType.ElementSequence,
                    new ServiceElement(ElementType.Uuid128, serviceClassUuid));
                ServiceRecord record = new ServiceRecord(
                    new ServiceAttribute(
                        InTheHand.Net.Bluetooth.AttributeIds.UniversalAttributeId.ServiceClassIdList,
                        classList),
                    new ServiceAttribute(
                        InTheHand.Net.Bluetooth.AttributeIds.UniversalAttributeId.ProtocolDescriptorList,
                        pdl));
                return record;
            }
            </code>
            </para>
            </remarks>
        </member>
        <member name="M:InTheHand.Net.Sockets.BluetoothListener.#ctor(InTheHand.Net.BluetoothAddress,System.Guid,InTheHand.Net.Bluetooth.ServiceRecord)">
            <summary>
            Initializes a new instance of the <see cref="T:InTheHand.Net.Sockets.BluetoothListener"/> class
            that listens for incoming connection attempts on the specified local Bluetooth address and service identifier,
            publishing the specified SDP record.
            </summary>
            -
            <param name="localaddr">A <see cref="T:InTheHand.Net.BluetoothAddress"/> that represents the local Bluetooth radio address.</param>
            <param name="service">The Bluetooth service to listen for.</param>
            <param name="sdpRecord">Prepared SDP Record to publish</param>
            -
            <remarks>
            <note>
            The constructors taking the SDP record explicitly should
            only be used if
            a specialized SDP record is required. For instance when using one of the
            standard profiles.  Otherwise use one of the other constructors 
            e.g. <see cref="M:InTheHand.Net.Sockets.BluetoothListener.#ctor(InTheHand.Net.BluetoothAddress,System.Guid)"/>
            which create a generic SDP Record from the specified service identifier.
            </note>
            <para>Any useful SDP record will include 
            a <c>ProtocolDescriptor</c> element containing
            the RFCOMM Channel number that the server is listening on,
            and a <c>ServiceClassId</c> element containing the service UUIDs.
            The record supplied in the <paramref name="sdpRecord"/> parameter
            should contain those elements.  On successful <see cref="M:InTheHand.Net.Sockets.BluetoothListener.Start"/>,
            the RFCOMM Channel number that the protocol stack has assigned to the
            server is retrieved, and copied into the service record before it is
            published.
            </para>
            <para>
            An example SDP record is as follows.  This is actually the format of the 
            generic record used in the other constructors.  For another example see
            the code in the <c>ObexListener</c> class.
            <code lang="C#">
            private static ServiceRecord CreateBasicRfcommRecord(Guid serviceClassUuid)
            {
                ServiceElement pdl = ServiceRecordHelper.CreateRfcommProtocolDescriptorList();
                ServiceElement classList = new ServiceElement(ElementType.ElementSequence,
                    new ServiceElement(ElementType.Uuid128, serviceClassUuid));
                ServiceRecord record = new ServiceRecord(
                    new ServiceAttribute(
                        InTheHand.Net.Bluetooth.AttributeIds.UniversalAttributeId.ServiceClassIdList,
                        classList),
                    new ServiceAttribute(
                        InTheHand.Net.Bluetooth.AttributeIds.UniversalAttributeId.ProtocolDescriptorList,
                        pdl));
                return record;
            }
            </code>
            </para>
            </remarks>
        </member>
        <member name="M:InTheHand.Net.Sockets.BluetoothListener.#ctor(InTheHand.Net.BluetoothEndPoint,InTheHand.Net.Bluetooth.ServiceRecord)">
            <summary>
            Initializes a new instance of the <see cref="T:InTheHand.Net.Sockets.BluetoothListener"/> class
            with the specified local endpoint,
            publishing the specified SDP record.
            </summary>
            -
            <param name="localEP">A <see cref="T:InTheHand.Net.BluetoothEndPoint"/> that represents 
            the local endpoint to which to bind the listener.
            See the <see cref="T:InTheHand.Net.Sockets.BluetoothListener"/> documentation for more information 
            on the usage of this argument.
            </param>
            <param name="sdpRecord">Prepared SDP Record to publish</param>
            -
            <remarks>
            <note>
            The constructors taking the SDP record explicitly (as a byte array) should
            only be used if
            a specialized SDP record is required. For instance when using one of the
            standard profiles.  Otherwise use one of the other constructors 
            e.g. <see cref="M:InTheHand.Net.Sockets.BluetoothListener.#ctor(InTheHand.Net.BluetoothEndPoint)"/>
            which create a generic SDP Record from the specified service identifier.
            </note>
            <para>Any useful SDP record will include 
            a <c>ProtocolDescriptor</c> element containing
            the RFCOMM Channel number that the server is listening on,
            and a <c>ServiceClassId</c> element containing the service UUIDs.
            The record supplied in the <paramref name="sdpRecord"/> parameter
            should contain those elements.  On successful <see cref="M:InTheHand.Net.Sockets.BluetoothListener.Start"/>,
            the RFCOMM Channel number that the protocol stack has assigned to the
            server is retrieved, and copied into the service record before it is
            published.
            </para>
            <para>
            An example SDP record is as follows.  This is actually the format of the 
            generic record used in the other constructors.  For another example see
            the code in the <c>ObexListener</c> class.
            <code lang="C#">
            private static ServiceRecord CreateBasicRfcommRecord(Guid serviceClassUuid)
            {
                ServiceElement pdl = ServiceRecordHelper.CreateRfcommProtocolDescriptorList();
                ServiceElement classList = new ServiceElement(ElementType.ElementSequence,
                    new ServiceElement(ElementType.Uuid128, serviceClassUuid));
                ServiceRecord record = new ServiceRecord(
                    new ServiceAttribute(
                        InTheHand.Net.Bluetooth.AttributeIds.UniversalAttributeId.ServiceClassIdList,
                        classList),
                    new ServiceAttribute(
                        InTheHand.Net.Bluetooth.AttributeIds.UniversalAttributeId.ProtocolDescriptorList,
                        pdl));
                return record;
            }
            </code>
            </para>
            </remarks>
        </member>
        <member name="M:InTheHand.Net.Sockets.BluetoothListener.Start">
            <summary>
            Starts listening for incoming connection requests.
            </summary>
        </member>
        <member name="M:InTheHand.Net.Sockets.BluetoothListener.Start(System.Int32)">
            <summary>
            Starts listening for incoming connection requests with a maximum number of pending connection.
            </summary>
            <param name="backlog">The maximum length of the pending connections queue.</param>
        </member>
        <member name="M:InTheHand.Net.Sockets.BluetoothListener.Stop">
            <summary>
            Stops the socket from monitoring connections.
            </summary>
        </member>
        <member name="M:InTheHand.Net.Sockets.BluetoothListener.BeginAcceptSocket(System.AsyncCallback,System.Object)">
            <summary>
            Begins an asynchronous operation to accept an incoming connection attempt.
            </summary>
            -
            <remarks>
            <note>The method is only supported on Microsoft Bluetooth stack platforms.
            </note>
            </remarks>
            -
            <param name="callback">An <see cref="T:System.AsyncCallback"/> delegate that references the method to invoke when the operation is complete.</param>
            <param name="state">A user-defined object containing information about the accept operation.
            This object is passed to the callback delegate when the operation is complete.</param>
            -
            <returns>An <see cref="T:System.IAsyncResult"/> that represents the 
            asynchronous accept, which could still be pending.
            </returns>
            -
            <exception cref="T:System.ObjectDisposedException">The <see cref="T:System.Net.Sockets.Socket"/> has been closed.</exception>
        </member>
        <member name="M:InTheHand.Net.Sockets.BluetoothListener.EndAcceptSocket(System.IAsyncResult)">
            <summary>
            Asynchronously accepts an incoming connection attempt and creates a new <see cref="T:System.Net.Sockets.Socket"/> to handle remote host communication.
            </summary>
            <param name="asyncResult">An <see cref="T:System.IAsyncResult"/> returned by a call to the <see cref="M:InTheHand.Net.Sockets.BluetoothListener.BeginAcceptSocket(System.AsyncCallback,System.Object)"/> method.</param>
            <returns>A <see cref="T:System.Net.Sockets.Socket"/>.</returns>
        </member>
        <member name="M:InTheHand.Net.Sockets.BluetoothListener.BeginAcceptBluetoothClient(System.AsyncCallback,System.Object)">
            <summary>
            Begins an asynchronous operation to accept an incoming connection attempt.
            </summary>
            -
            <param name="callback">An <see cref="T:System.AsyncCallback"/> delegate that references the method to invoke when the operation is complete.</param>
            <param name="state">A user-defined object containing information about the accept operation.
            This object is passed to the callback delegate when the operation is complete.</param>
            -
            <returns>An <see cref="T:System.IAsyncResult"/> that represents the 
            asynchronous accept, which could still be pending.
            </returns>
        </member>
        <member name="M:InTheHand.Net.Sockets.BluetoothListener.EndAcceptBluetoothClient(System.IAsyncResult)">
            <summary>
            Asynchronously accepts an incoming connection attempt and creates a new <see cref="T:InTheHand.Net.Sockets.BluetoothClient"/> to handle remote host communication.
            </summary>
            <param name="asyncResult">An <see cref="T:System.IAsyncResult"/> returned by a call to the <see cref="M:InTheHand.Net.Sockets.BluetoothListener.BeginAcceptBluetoothClient(System.AsyncCallback,System.Object)"/> method.</param>
            <returns>A <see cref="T:InTheHand.Net.Sockets.BluetoothClient"/>.</returns>
        </member>
        <member name="M:InTheHand.Net.Sockets.BluetoothListener.AcceptSocket">
            <summary>
            Creates a new socket for a connection.
            </summary>
            -
            <remarks>
            <note>The method is only supported on Microsoft Bluetooth stack platforms.
            </note>
            <para>AcceptSocket is a blocking method that returns a <see cref="T:System.Net.Sockets.Socket"/> that you can use to send and receive data.
            If you want to avoid blocking, use the <see cref="M:InTheHand.Net.Sockets.BluetoothListener.Pending"/> method to determine if connection requests are available in the incoming connection queue.
            </para>
            <para>The <see cref="T:System.Net.Sockets.Socket"/> returned is initialized with the address and channel number of the remote device.
            You can use any of the Send and Receive methods available in the <see cref="T:System.Net.Sockets.Socket"/> class to communicate with the remote device.
            When you are finished using the <see cref="T:System.Net.Sockets.Socket"/>, be sure to call its <see cref="M:System.Net.Sockets.Socket.Close"/> method.
            If your application is relatively simple, consider using the <see cref="M:InTheHand.Net.Sockets.BluetoothListener.AcceptBluetoothClient"/> method rather than the AcceptSocket method.
            <see cref="T:InTheHand.Net.Sockets.BluetoothClient"/> provides you with simple methods for sending and receiving data over a network in blocking synchronous mode.</para></remarks>
            <returns>A <see cref="T:System.Net.Sockets.Socket"/> used to send and receive data.</returns>
            <exception cref="T:System.InvalidOperationException">Listener is stopped.</exception>
        </member>
        <member name="M:InTheHand.Net.Sockets.BluetoothListener.AcceptBluetoothClient">
            <summary>
            Creates a client object for a connection when the specified service or endpoint is detected by the listener component.
            </summary>
            <remarks>AcceptTcpClient is a blocking method that returns a <see cref="T:InTheHand.Net.Sockets.BluetoothClient"/> that you can use to send and receive data.
            Use the <see cref="M:InTheHand.Net.Sockets.BluetoothListener.Pending"/> method to determine if connection requests are available in the incoming connection queue if you want to avoid blocking.
            <para>Use the <see cref="M:InTheHand.Net.Sockets.BluetoothClient.GetStream"/> method to obtain the underlying <see cref="T:System.Net.Sockets.NetworkStream"/> of the returned <see cref="T:InTheHand.Net.Sockets.BluetoothClient"/>.
            The <see cref="T:System.Net.Sockets.NetworkStream"/> will provide you with methods for sending and receiving with the remote host.
            When you are through with the <see cref="T:InTheHand.Net.Sockets.BluetoothClient"/>, be sure to call its <see cref="M:InTheHand.Net.Sockets.BluetoothClient.Close"/> method.
            If you want greater flexibility than a <see cref="T:InTheHand.Net.Sockets.BluetoothClient"/> offers, consider using <see cref="M:InTheHand.Net.Sockets.BluetoothListener.AcceptSocket"/>.</para></remarks>
            <returns>A <see cref="T:InTheHand.Net.Sockets.BluetoothClient"/> component.</returns>
            <exception cref="T:System.InvalidOperationException">Listener is stopped.</exception>
        </member>
        <member name="M:InTheHand.Net.Sockets.BluetoothListener.Pending">
            <summary>
            Determines if there is a connection pending.
            </summary>
            <returns>true if there is a connection pending; otherwise, false.</returns>
        </member>
        <member name="M:InTheHand.Net.Sockets.BluetoothListener.SetPin(InTheHand.Net.BluetoothAddress,System.String)">
            <summary>
            Set or change the PIN to be used with a specific remote device.
            </summary>
            <param name="device">Address of Bluetooth device.</param>
            <param name="pin">PIN string consisting of 1 to 16 ASCII characters.</param>
            <remarks>Assigning null (Nothing in VB) or an empty String will revoke the PIN.</remarks>
        </member>
        <member name="P:InTheHand.Net.Sockets.BluetoothListener.LocalEndPoint">
            <summary>
            Gets the local endpoint.
            </summary>
            -
            <value>The <see cref="T:InTheHand.Net.BluetoothEndPoint"/>
            that the listener is using for communications.
            </value>
            -
            <remarks>
            <para>The <see cref="P:InTheHand.Net.BluetoothEndPoint.Port"/> 
            property of the endpoint will contain the port number (RFCOMM Channel 
            Number) that the listener is listening on.
            On some platforms, the <see cref="P:InTheHand.Net.BluetoothEndPoint.Address"/>
            is similarly set, or is <see cref="F:InTheHand.Net.BluetoothAddress.None"/> 
            if not known.  The endpoint&#x2019;s <see cref="P:InTheHand.Net.BluetoothEndPoint.Service"/>
            is never set.
            </para>
            </remarks>
        </member>
        <member name="P:InTheHand.Net.Sockets.BluetoothListener.ServiceClass">
            <summary>
            Get or set the Service Class flags that this service adds to the host 
            device&#x2019;s Class Of Device field.
            </summary>
            -
            <remarks>
            <para>The Class of Device value contains a Device part which describes 
            the primary service that the device provides, and a Service part which 
            is a set of flags indicating all the service types that the device supports, 
            e.g. <see cref="F:InTheHand.Net.Bluetooth.ServiceClass.ObjectTransfer"/>,
            <see cref="F:InTheHand.Net.Bluetooth.ServiceClass.Telephony"/>,
            <see cref="F:InTheHand.Net.Bluetooth.ServiceClass.Audio"/> etc.
            This property supports setting those flags; bits set in this value will be 
            <strong>added</strong> to the host device&#x2019;s CoD Service Class bits when the listener
            is active.  For Win32 see <see href="http://msdn.microsoft.com/en-us/library/aa362940(VS.85).aspx">MSDN &#x2014; BTH_SET_SERVICE Structure</see>
            </para>
            <para><note>Supported on Win32, but not supported on WindowsMobile/WinCE 
            as there's no native API for it.  The WindowCE section of MSDN mentions the
            Registry value <c>COD</c> at key <c>HKEY_LOCAL_MACHINE\Software\Microsoft\Bluetooth\sys</c>. 
            However my (Jam) has value 0x920100 there but advertises a CoD of 0x100114, 
            so its not clear how the values relate to each other.
            </note>
            </para>
            </remarks>
        </member>
        <member name="P:InTheHand.Net.Sockets.BluetoothListener.ServiceName">
            <summary>
            Get or set the ServiceName the server will use in its SDP Record.
            </summary>
            -
            <value>A string representing the value to be used for the Service Name
            SDP Attribute.  Will be <see langword="null"/> if not specfied.
            </value>
            -
            <exception cref="T:System.InvalidOperationException">
            The listener is already started.
            <para>- or -</para>
            A custom Service Record was given at initialization time.  In that case 
            the ServiceName attribute should be added to that record.
            </exception>
        </member>
        <member name="P:InTheHand.Net.Sockets.BluetoothListener.Server">
            <summary>
            Gets the underlying network <see cref="T:System.Net.Sockets.Socket"/>.
            </summary>
            -
            <value>The underlying network <see cref="T:System.Net.Sockets.Socket"/>.</value>
            -
            <remarks>
            <note>The property is only supported on Microsoft Bluetooth stack platforms.
            </note>
            <para><see cref="T:InTheHand.Net.Sockets.BluetoothListener"/> creates a <see cref="T:System.Net.Sockets.Socket"/> to listen for incoming client connection requests.
            Classes deriving from <see cref="T:InTheHand.Net.Sockets.BluetoothListener"/> can use this property to get this <see cref="T:System.Net.Sockets.Socket"/>.
            Use the underlying <see cref="T:System.Net.Sockets.Socket"/> returned by the <see cref="P:InTheHand.Net.Sockets.BluetoothListener.Server"/> property if you require access beyond that which <see cref="T:InTheHand.Net.Sockets.BluetoothListener"/> provides.
            </para>
            <para>Note <see cref="P:InTheHand.Net.Sockets.BluetoothListener.Server"/> property only returns the <see cref="T:System.Net.Sockets.Socket"/> used to listen for incoming client connection requests.
            Use the <see cref="M:InTheHand.Net.Sockets.BluetoothListener.AcceptSocket"/> method to accept a pending connection request and obtain a <see cref="T:System.Net.Sockets.Socket"/> for sending and receiving data.
            You can also use the <see cref="M:InTheHand.Net.Sockets.BluetoothListener.AcceptBluetoothClient"/> method to accept a pending connection request and obtain a <see cref="T:InTheHand.Net.Sockets.BluetoothClient"/> for sending and receiving data.
            </para>
            </remarks>
        </member>
        <member name="P:InTheHand.Net.Sockets.BluetoothListener.ServiceRecord">
            <summary>
            Returns the SDP Service Record for this service.
            </summary>
            <remarks>
            <note>Returns <see langword="null"/> if the listener is not 
            <see cref="M:InTheHand.Net.Sockets.BluetoothListener.Start"/>ed
            (and an record wasn&#x2019;t supplied at initialization).
            </note>
            </remarks>
        </member>
        <member name="P:InTheHand.Net.Sockets.BluetoothListener.Authenticate">
            <summary>
            Gets or sets the authentication state of the current connect or behaviour to use when connection is established.
            </summary>
            <remarks>
            For disconnected sockets, specifies that authentication is required in order for a connect or accept operation to complete successfully.
            Setting this option actively initiates authentication during connection establishment, if the two Bluetooth devices were not previously authenticated.
            The user interface for passkey exchange, if necessary, is provided by the operating system outside the application context.
            For outgoing connections that require authentication, the connect operation fails with WSAEACCES if authentication is not successful.
            In response, the application may prompt the user to authenticate the two Bluetooth devices before connection.
            For incoming connections, the connection is rejected if authentication cannot be established and returns a WSAEHOSTDOWN error.
            </remarks>
        </member>
        <member name="P:InTheHand.Net.Sockets.BluetoothListener.Encrypt">
            <summary>
            On unconnected sockets, enforces encryption to establish a connection.
            Encryption is only available for authenticated connections.
            For incoming connections, a connection for which encryption cannot be established is automatically rejected and returns WSAEHOSTDOWN as the error.
            For outgoing connections, the connect function fails with WSAEACCES if encryption cannot be established.
            In response, the application may prompt the user to authenticate the two Bluetooth devices before connection.
            </summary>
        </member>
        <member name="T:InTheHand.Net.Sockets.AddressFamily32">
            <summary>
            Specifies additional addressing schemes that an instance of the <see cref="T:System.Net.Sockets.Socket"/> class can use.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Sockets.AddressFamily32.Bluetooth">
            <summary>
            Bluetooth address.
            </summary>
            <value>32</value>
        </member>
        <member name="F:InTheHand.Net.Sockets.AddressFamily32.Irda">
            <summary>
            IrDA address used on some Windows CE platforms (Has a different value to <see cref="T:System.Net.Sockets.AddressFamily">AddressFamily.IrDA</see>).
            </summary>
            <value>22</value>
        </member>
        <member name="T:InTheHand.Net.Bluetooth.ServiceRecordBuilder">
            <summary>
            Provides a simple way to build a <see cref="T:InTheHand.Net.Bluetooth.ServiceRecord"/>, 
            including ServiceClassIds and ServiceNames attributes etc.
            </summary>
            -
            <remarks>
            <para>The service&#x2019;s Class Id can be set with the 
            <see cref="M:InTheHand.Net.Bluetooth.ServiceRecordBuilder.AddServiceClass(System.Guid)"/>/<see cref="M:InTheHand.Net.Bluetooth.ServiceRecordBuilder.AddServiceClass(System.UInt16)"/>/etc
            methods, the protocol stack set with the <see cref="P:InTheHand.Net.Bluetooth.ServiceRecordBuilder.ProtocolType"/>
            property (default RFCOMM), and the Service Name set with the 
            <see cref="P:InTheHand.Net.Bluetooth.ServiceRecordBuilder.ServiceName"/>
            property.  Other properties and methods exist for controlling the more advanced 
            attributes.
            </para>
            <para>Adding the standard text-string attributes (ServiceName etc) is normally quite
            difficult due to the very baroque manner of specifying these strings&#x2019; character 
            encoding and natural language.  The builder handles all the complexity internally; 
            the strings are written in UTF-8 encoding and marked as 'English' language.
            </para>
            </remarks>
            -
            <example>
            <code>
            ServiceRecordBuilder bldr = new ServiceRecordBuilder();
            bldr.AddServiceClass(BluetoothService.SerialPort);
            bldr.ServiceName = "Alan's SPP service";
            //
            ServiceRecord rcd = bldr.ServiceRecord;
            </code>
            
            <code>
            ServiceRecordBuilder bldr = new ServiceRecordBuilder();
            bldr.ProtocolType = BluetoothProtocolDescriptorType.GeneralObex;
            bldr.AddServiceClass(BluetoothService.ObexFileTransfer);
            bldr.ServiceName = "Alan's FTP service";
            //
            ServiceRecord rcd = bldr.ServiceRecord;
            </code>
            </example>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.ServiceRecordBuilder.#ctor">
            <summary>
            Create a new instance of the <see cref="T:InTheHand.Net.Bluetooth.ServiceRecordBuilder"/> class.
            </summary>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.ServiceRecordBuilder.ReportIfDuplicates(System.Collections.Generic.List{InTheHand.Net.Bluetooth.ServiceAttribute},System.Boolean)">
            <param name="list">The list to check for duplicates.
            </param>
            <param name="storedList"><c>true</c> if checking a previously stored list 
            of attributes, and <c>false</c> if checking a immediate addition of an 
            attribute. Thus throws <c>InvalidOperationException</c> and 
            <c>ArgumentException</c> respectively.
            </param>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.ServiceRecordBuilder.AddServiceClass(System.Guid)">
            <summary>
            Add a Service Class Id.
            </summary>
            -
            <remarks>
            <para>Multiple class ids can be added, and they will be written to the 
            <see cref="F:InTheHand.Net.Bluetooth.AttributeIds.UniversalAttributeId.ServiceClassIdList"/>
            attribute in the order in which they were set.
            </para>
            </remarks>
            -
            <param name="uuid128">A <see cref="T:System.Guid"/> containing a 
            UUID for the advertised service.
            </param>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.ServiceRecordBuilder.AddServiceClass(System.UInt16)">
            <summary>
            Add a Service Class Id.
            </summary>
            -
            <remarks>
            <para>Multiple class ids can be added, and they will be written to the 
            <see cref="F:InTheHand.Net.Bluetooth.AttributeIds.UniversalAttributeId.ServiceClassIdList"/>
            attribute in the order in which they were set.
            </para>
            </remarks>
            -
            <param name="uuid16">A <see cref="T:System.UInt16"/> containing a short-form 
            UUID for the advertised service.
            </param>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.ServiceRecordBuilder.AddServiceClass(System.UInt32)">
            <summary>
            Add a Service Class Id.
            </summary>
            -
            <remarks>
            <para>Multiple class ids can be added, and they will be written to the 
            <see cref="F:InTheHand.Net.Bluetooth.AttributeIds.UniversalAttributeId.ServiceClassIdList"/>
            attribute in the order in which they were set.
            </para>
            </remarks>
            -
            <param name="uuid32">A <see cref="T:System.UInt32"/> containing a short-form 
            UUID for the advertised service.
            </param>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.ServiceRecordBuilder.AddServiceClass(System.Int32)">
            <summary>
            Add a Service Class Id.
            </summary>
            -
            <remarks>
            <para>Multiple class ids can be added, and they will be written to the 
            <see cref="F:InTheHand.Net.Bluetooth.AttributeIds.UniversalAttributeId.ServiceClassIdList"/>
            attribute in the order in which they were set.
            </para>
            </remarks>
            -
            <param name="uuid16or32">A <see cref="T:System.Int32"/> containing a short-form 
            UUID for the advertised service.
            </param>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.ServiceRecordBuilder.AddBluetoothProfileDescriptor(System.Guid,System.Byte,System.Byte)">
            <summary>
            Add a <see cref="F:InTheHand.Net.Bluetooth.AttributeIds.UniversalAttributeId.BluetoothProfileDescriptorList"/> 
            element.
            </summary>
            -
            <param name="classId">The Service Class Id of the Bluetooth profile, 
            as a <see cref="T:System.Guid"/>
            </param>
            <param name="majorVersion">The major version number, as a <see cref="T:System.Byte"/>.
            </param>
            <param name="minorVersion">The minor version number, as a <see cref="T:System.Byte"/>.
            </param>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.ServiceRecordBuilder.AddCustomAttributes(System.Collections.Generic.IEnumerable{InTheHand.Net.Bluetooth.ServiceAttribute})">
            <summary>
            Add a set of custom attribute.
            </summary>
            -
            <param name="serviceAttributes">A set of attributes as an 
            <see cref="T:System.Collections.Generic.IEnumerable`1"/> returning 
            <see cref="T:InTheHand.Net.Bluetooth.ServiceAttribute"/> instances.
            </param>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.ServiceRecordBuilder.AddCustomAttributes(System.Collections.IEnumerable)">
            <summary>
            Add a set of custom attribute.
            </summary>
            -
            <param name="serviceAttributes">A set of attributes as an 
            <see cref="T:System.Collections.IEnumerable"/> returning 
            <see cref="T:InTheHand.Net.Bluetooth.ServiceAttribute"/> instances.
            </param>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.ServiceRecordBuilder.AddCustomAttributes(InTheHand.Net.Bluetooth.ServiceAttribute[])">
            <summary>
            Add a set of custom attribute.
            </summary>
            -
            <param name="serviceAttributes">A set of attributes as an array of 
            <see cref="T:InTheHand.Net.Bluetooth.ServiceAttribute"/>.
            </param>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.ServiceRecordBuilder.AddCustomAttribute(InTheHand.Net.Bluetooth.ServiceAttribute)">
            <overloads>
            Add a custom attribute.
            </overloads>
            -
            <summary>
            Add a custom attribute from a given <see cref="T:InTheHand.Net.Bluetooth.ServiceAttribute"/>
            </summary>
            -
            <param name="serviceAttribute">An attribute as a 
            <see cref="T:InTheHand.Net.Bluetooth.ServiceAttribute"/> instance.
            </param>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.ServiceRecordBuilder.AddCustomAttribute(InTheHand.Net.Bluetooth.ServiceAttributeId,InTheHand.Net.Bluetooth.ElementType,System.Object)">
            <summary>
            Add a custom attribute of simple type.
            </summary>
            -
            <remarks>
            <para>If the <paramref name="elementType"/> is a numerical type
            then this is equivalent to using
            <see cref="M:InTheHand.Net.Bluetooth.ServiceElement.CreateNumericalServiceElement(InTheHand.Net.Bluetooth.ElementType,System.Object)"/>
            otherwise the value is used directly in creating the
            <see cref="T:InTheHand.Net.Bluetooth.ServiceElement"/>.
            </para>
            </remarks>
            -
            <param name="id">The Attribute Id as a <see cref="T:InTheHand.Net.Bluetooth.ServiceAttributeId"/>.</param>
            <param name="elementType">The type of the element as an <see cref="T:InTheHand.Net.Bluetooth.ElementType"/>.</param>
            <param name="value">The value for the new element.</param>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.ServiceRecordBuilder.AddCustomAttribute(System.UInt16,InTheHand.Net.Bluetooth.ElementType,System.Object)">
            <summary>
            Add a custom attribute of simple type.
            </summary>
            -
            <remarks>
            <para>If the <paramref name="elementType"/> is a numerical type
            then this is equivalent to using
            <see cref="M:InTheHand.Net.Bluetooth.ServiceElement.CreateNumericalServiceElement(InTheHand.Net.Bluetooth.ElementType,System.Object)"/>
            otherwise the value is used directly in creating the
            <see cref="T:InTheHand.Net.Bluetooth.ServiceElement"/>.
            </para>
            </remarks>
            -
            <param name="id">The Attribute Id as a <see cref="T:System.UInt16"/>.</param>
            <param name="elementType">The type of the element as an <see cref="T:InTheHand.Net.Bluetooth.ElementType"/>.</param>
            <param name="value">The value for the new element.</param>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.ServiceRecordBuilder.FromJsr82ServerUri(System.String)">
             <summary>
             Converts a Java JSR 82 Bluetooth server URL into a 
             <see cref="T:InTheHand.Net.Bluetooth.ServiceRecordBuilder"/> instance.
             </summary>
             -
             <remarks>
             <note type="caution">The <c>authenticate</c> and <c>encrypt</c> and any 
             related parameters are completely disregarded.  When using with 
             <see cref="T:InTheHand.Net.Sockets.BluetoothListener"/> you must take 
             care to set the required security requirements on it directly.
             </note>
             This method is intended to read the Service Record (SDP) related items only; 
             in particular the Service Class ID UUID and Service Name parameters.
             It supports only the <c>btspp</c> and <c>btObex</c> schemes and only for
             server-side use only.  For instance
            <code lang="none">btspp://localhost:3B9FA89520078C303355AAA694238F08;name=FooBar</code>
             and
            <code lang="none">btgoep://localhost:3B9FA89520078C303355AAA694238F08</code>
             There is no suppport for e.g.
            <code lang="none">btl2cap://localhost:3B9FA89520078C303355AAA694238F08;name=Aserv</code>
             as the library supports only RFCOMM connections currently.
             </remarks>
             -
             <param name="url">A server-side JSR 82 URL in one of the supported forms.
             </param>
             -
             <returns>A <see cref="T:InTheHand.Net.Bluetooth.ServiceRecordBuilder"/> 
             initialised with the supported components of the supplied JSR 82 URL.
             </returns>
        </member>
        <member name="P:InTheHand.Net.Bluetooth.ServiceRecordBuilder.ServiceRecord">
            <summary>
            Gets the <see cref="T:InTheHand.Net.Bluetooth.ServiceRecord"/> instance 
            constructed by the specified <see cref="T:InTheHand.Net.Bluetooth.ServiceRecordBuilder"/> instance.
            </summary>
            -
            <value>
            A <see cref="T:InTheHand.Net.Bluetooth.ServiceRecord"/> that contains 
            the URI constructed by the <see cref="T:InTheHand.Net.Bluetooth.ServiceRecordBuilder"/> .
            </value>
            -
            <exception cref="T:System.InvalidOperationException">The <see cref="T:InTheHand.Net.Bluetooth.ServiceRecord"/> 
            created by the <see cref="T:InTheHand.Net.Bluetooth.ServiceRecordBuilder"/> properties is invalid.
            For instance, if duplicates attributes are disallowed but duplicates are 
            present.
            </exception>
        </member>
        <member name="P:InTheHand.Net.Bluetooth.ServiceRecordBuilder.ServiceName">
            <summary>
            Get or set a value for the <see cref="F:InTheHand.Net.Bluetooth.AttributeIds.UniversalAttributeId.ServiceName"/> 
            attribute.
            </summary>
            -
            <remarks><para>When present, a corresponding <see cref="F:InTheHand.Net.Bluetooth.AttributeIds.UniversalAttributeId.LanguageBaseAttributeIdList"/> 
            attribute will be added too.
            </para>
            </remarks>
        </member>
        <member name="P:InTheHand.Net.Bluetooth.ServiceRecordBuilder.ProviderName">
            <summary>
            Get or set a value for the <see cref="F:InTheHand.Net.Bluetooth.AttributeIds.UniversalAttributeId.ProviderName"/> 
            attribute.
            </summary>
            -
            <remarks><para>When present, a corresponding <see cref="F:InTheHand.Net.Bluetooth.AttributeIds.UniversalAttributeId.LanguageBaseAttributeIdList"/> 
            attribute will be added too.
            </para>
            </remarks>
        </member>
        <member name="P:InTheHand.Net.Bluetooth.ServiceRecordBuilder.ServiceDescription">
            <summary>
            Get or set a value for the <see cref="F:InTheHand.Net.Bluetooth.AttributeIds.UniversalAttributeId.ServiceDescription"/> 
            attribute.
            </summary>
            -
            <remarks><para>When present, a corresponding <see cref="F:InTheHand.Net.Bluetooth.AttributeIds.UniversalAttributeId.LanguageBaseAttributeIdList"/> 
            attribute will be added too.
            </para>
            </remarks>
        </member>
        <member name="P:InTheHand.Net.Bluetooth.ServiceRecordBuilder.ProtocolType">
            <summary>
            Get or set which type of element will be added for the <see cref="F:InTheHand.Net.Bluetooth.AttributeIds.UniversalAttributeId.ProtocolDescriptorList"/> 
            attribute.
            </summary>
            -
            <value>An instance of the <see cref="T:InTheHand.Net.Bluetooth.BluetoothProtocolDescriptorType"/> 
            enumeration.
            </value>
            -
            <remarks><para>Supported type are the following:
            </para>
            <list type="bullet">
            <item><term>None</term>
            <description>No PDL attribute will be added.</description>
            </item>
            <item><term>Rfcomm</term>
            <description>A standard RFCOMM element will be added.</description>
            </item>
            <item><term>Goep</term>
            <description>A standard GOEP (OBEX) element will be added.</description>
            </item>
            <item><term>L2Cap</term>
            <description>A standard L2CAP element will be added.</description>
            </item>
            </list>
            <para>The default is <see cref="F:InTheHand.Net.Bluetooth.BluetoothProtocolDescriptorType.Rfcomm"/>.
            </para>
            </remarks>
        </member>
        <member name="T:InTheHand.Net.Bluetooth.HardwareStatus">
            <summary>
            Specifies the current status of the Bluetooth hardware.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.HardwareStatus.Unknown">
            <summary>
            Status cannot be determined.
            </summary>
            XXXX &#x201C;The stack is not present.&#x201D; CE5
        </member>
        <member name="F:InTheHand.Net.Bluetooth.HardwareStatus.NotPresent">
            <summary>
            Bluetooth radio not present.
            </summary>
            &#x201C;The adapter is not present.&#x201D; CE5
        </member>
        <member name="F:InTheHand.Net.Bluetooth.HardwareStatus.Initializing">
            <summary>
            Bluetooth radio is in the process of starting up.
            </summary>
            &#x201C;The adapter might be installed.
            The stack is currently on the way up. Call again later.&#x201D; CE5
        </member>
        <member name="F:InTheHand.Net.Bluetooth.HardwareStatus.Running">
            <summary>
            Bluetooth radio is active.
            </summary>
            &#x201C;The adapter is installed and the stack is running.&#x201D; CE5
        </member>
        <member name="F:InTheHand.Net.Bluetooth.HardwareStatus.Shutdown">
            <summary>
            Bluetooth radio is in the process of shutting down.
            </summary>
            &#x201C;The adapter is installed, but the stack is not running.&#x201D; CE5
        </member>
        <member name="F:InTheHand.Net.Bluetooth.HardwareStatus.Error">
            <summary>
            Bluetooth radio is in an error state.
            </summary>
            &#x201C;The adapter might be installed.
            The stack is on the way down. Call again later.&#x201D; CE5
        </member>
        <member name="T:InTheHand.Net.Bluetooth.ClassOfDevice">
            <summary>
            Describes the device and service capabilities of a device.
            </summary>
            -
            <remarks>
            <para>Is returned by the properties
            <see cref="P:InTheHand.Net.Sockets.BluetoothDeviceInfo.ClassOfDevice">BluetoothDeviceInfo.ClassOfDevice</see>
            and
            <see cref="P:InTheHand.Net.Bluetooth.BluetoothRadio.ClassOfDevice">BluetoothRadio.ClassOfDevice</see>.
            </para>
            </remarks>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.ClassOfDevice.#ctor(System.UInt32)">
            <summary>
            Initialize a new instance of class <see cref="T:InTheHand.Net.Bluetooth.ClassOfDevice"/>.
            </summary>
            -
            <remarks>
            <para>An example raw value is 0x00020104, which stands for
            device: DesktopComputer, service: Network.
            </para>
            </remarks>
            -
            <param name="cod">A <see cref="T:System.UInt32"/> containing the
            raw Class of Device value.
            </param>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.ClassOfDevice.#ctor(InTheHand.Net.Bluetooth.DeviceClass,InTheHand.Net.Bluetooth.ServiceClass)">
            <summary>
            Initialize a new instance of class <see cref="T:InTheHand.Net.Bluetooth.ClassOfDevice"/>.
            </summary>
            -
            <param name="device">A <see cref="T:InTheHand.Net.Bluetooth.DeviceClass"/>
            value.
            </param>
            <param name="service">A <see cref="T:InTheHand.Net.Bluetooth.ServiceClass"/>
            value.
            </param>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.ClassOfDevice.GetHashCode">
            <summary>
            Returns the hash code for this instance.
            </summary>
            <returns>A hash code for the current object.</returns>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.ClassOfDevice.ToString">
            <summary>
            Returns the numerical value represented in a hexadecimal.
            </summary>
            -
            <returns>A <see cref="T:System.String"/> containing
            the numerical value represented in a hexadecimal
            e.g. "720104", "5A020C".
            </returns>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.ClassOfDevice.Equals(System.Object)">
            <summary>
            Returns a value indicating whether this instance is equal to a specified 
            object.
            </summary>
            <param name="obj">An object
            value to compare with the current instance.
            </param>
            <returns>true if <paramref name="obj"/> is an instance of <see cref="T:InTheHand.Net.Bluetooth.ClassOfDevice"/>
            and equals the value of this instance; otherwise, false.
            </returns>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.ClassOfDevice.Equals(InTheHand.Net.Bluetooth.ClassOfDevice)">
            <summary>
            Returns a value indicating whether this instance is equal to a specified 
            <see cref="T:InTheHand.Net.Bluetooth.ClassOfDevice"/> value.
            </summary>
            <param name="other">An <see cref="T:InTheHand.Net.Bluetooth.ClassOfDevice"/>
            value to compare with the current instance.
            </param>
            <returns>true if <paramref name="other"/>
            has the same value as this instance; otherwise, false.
            </returns>
        </member>
        <member name="P:InTheHand.Net.Bluetooth.ClassOfDevice.Device">
            <summary>
            Returns the device type.
            </summary>
        </member>
        <member name="P:InTheHand.Net.Bluetooth.ClassOfDevice.MajorDevice">
            <summary>
            Returns the major device type.
            </summary>
        </member>
        <member name="P:InTheHand.Net.Bluetooth.ClassOfDevice.Service">
            <summary>
            Returns supported service types.
            </summary>
        </member>
        <member name="P:InTheHand.Net.Bluetooth.ClassOfDevice.Value">
            <summary>
            Gets the numerical value.
            </summary>
            <seealso cref="P:InTheHand.Net.Bluetooth.ClassOfDevice.ValueAsInt32"/>
        </member>
        <member name="P:InTheHand.Net.Bluetooth.ClassOfDevice.ValueAsInt32">
            <summary>
            Gets the numerical value, suitable for CLS Compliance.
            </summary>
            <seealso cref="P:InTheHand.Net.Bluetooth.ClassOfDevice.Value"/>
        </member>
        <member name="T:InTheHand.Net.Sockets.BluetoothSocketOptionName">
            <summary>
            Defines <see cref="T:System.Net.Sockets.Socket"/> configuration option names for the <see cref="T:System.Net.Sockets.Socket"/> class.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Sockets.BluetoothSocketOptionName.Authenticate">
            <summary>
            On connected socket, triggers authentication.
            On not connected socket, forces authentication on connection.
            For incoming connection this means that connection is rejected if authentication cannot be performed.
            </summary>
            <remarks>The optval and optlen parameters are ignored; however, Winsock implementation on Windows CE requires optlen to be at least 4 and optval to point to at least an integer datum.</remarks>
        </member>
        <member name="F:InTheHand.Net.Sockets.BluetoothSocketOptionName.XPAuthenticate">
            <summary>
            Toggles authentication under Windows XP.
            </summary>
            <remarks>optlen=sizeof(ULONG), optval = &amp;(ULONG)TRUE/FALSE</remarks>
        </member>
        <member name="F:InTheHand.Net.Sockets.BluetoothSocketOptionName.Encrypt">
            <summary>
            On a connected socket, this command turns encryption on or off.
            On an unconnected socket, this forces encryption to be on or off on connection.
            For an incoming connection, this means that the connection is rejected if the encryption cannot be turned on.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Sockets.BluetoothSocketOptionName.SetPin">
            <summary>
            This sets or revokes PIN code to use with a connection or socket.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Sockets.BluetoothSocketOptionName.SetLink">
            <summary>
            This sets or revokes link key to use with a connection or peer device.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Sockets.BluetoothSocketOptionName.GetLink">
            <summary>
            Returns link key associated with peer Bluetooth device.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Sockets.BluetoothSocketOptionName.XPMtu">
            <summary>
            Get or set the default MTU on Windows XP.
            </summary>
            <remarks>optlen=sizeof(ULONG), optval = &amp;mtu</remarks>
        </member>
        <member name="F:InTheHand.Net.Sockets.BluetoothSocketOptionName.SetMtu">
            <summary>
            This sets default MTU (maximum transmission unit) for connection negotiation.
            While allowed for connected socket, it has no effect if the negotiation has already completed.
            Setting it on listening socket will propagate the value for all incoming connections.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Sockets.BluetoothSocketOptionName.GetMtu">
            <summary>
            Returns MTU (maximum transmission unit).
            For connected socket, this is negotiated value, for server (accepting) socket it is MTU proposed for negotiation on connection request.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Sockets.BluetoothSocketOptionName.XPMtuMaximum">
            <summary>
            Get or set the maximum MTU on Windows XP.
            </summary>
            <remarks>optlen=sizeof(ULONG), optval = &amp;max. mtu</remarks>
        </member>
        <member name="F:InTheHand.Net.Sockets.BluetoothSocketOptionName.SetMtuMaximum">
            <summary>
            This sets maximum MTU for connection negotiation.
            While allowed for connected socket, it has no effect if the negotiation has already completed.
            Setting it on listening socket will propagate the value for all incoming connections.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Sockets.BluetoothSocketOptionName.GetMtuMaximum">
            <summary>
            Returns maximum MTU acceptable MTU value for a connection on this socket.
            Because negotiation has already happened, has little meaning for connected socket.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Sockets.BluetoothSocketOptionName.XPMtuMinimum">
            <summary>
            Get or set the minimum MTU on Windows XP.
            </summary>
            <remarks>optlen=sizeof(ULONG), optval = &amp;min. mtu</remarks>
        </member>
        <member name="F:InTheHand.Net.Sockets.BluetoothSocketOptionName.SetMtuMinimum">
            <summary>
            This sets minimum MTU for connection negotiation.
            While allowed for connected socket, it has no effect if the negotiation has already completed.
            Setting it on listening socket will propagate the value for all incoming connections.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Sockets.BluetoothSocketOptionName.GetMtuMinimum">
            <summary>
            Returns minimum MTU acceptable MTU value for a connection on this socket.
            Because negotiation has already happened, has little meaning for connected socket. 
            </summary>
        </member>
        <member name="F:InTheHand.Net.Sockets.BluetoothSocketOptionName.SetXOnLimit">
            <summary>
            This sets XON limit.
            Setting it on listening socket will propagate the value for all incoming connections.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Sockets.BluetoothSocketOptionName.GetXOnLimit">
            <summary>
            Returns XON limit for a connection.
            XON limit is only used for peers that do not support credit-based flow control (mandatory in the Bluetooth Core Specification version 1.1).
            When amount of incoming data received, but not read by an application for a given connection grows past this limit, a flow control command is sent to the peer requiring suspension of transmission.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Sockets.BluetoothSocketOptionName.SetXOffLimit">
            <summary>
            This sets XOFF limit.
            Setting it on listening socket will propagate the value for all incoming connections.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Sockets.BluetoothSocketOptionName.GetXOffLimit">
            <summary>
            Returns XOFF limit for a connection.
            XOFF limit is only used for peers that do not support credit-based flow control (mandatory in the Bluetooth Core Specification 1.1).
            If flow has been suspended because of buffer run-up, when amount of incoming data received, but not read by an application for a given connection falls below this limit, a flow control command is sent to the peer allowing continuation of transmission.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Sockets.BluetoothSocketOptionName.SetSendBuffer">
            <summary>
            Specifies maximum amount of data that can be buffered inside RFCOMM (this is amount of data before call to send blocks).
            </summary>
        </member>
        <member name="F:InTheHand.Net.Sockets.BluetoothSocketOptionName.GetSendBuffer">
            <summary>
             Returns maximum amount of data that can be buffered inside RFCOMM (this is amount of data before call to send blocks).
            </summary>
        </member>
        <member name="F:InTheHand.Net.Sockets.BluetoothSocketOptionName.SetReceiveBuffer">
            <summary>
            Specifies maximum amount of data that can be buffered for a connection.
            This buffer size is used to compute number of credits granted to peer device when credit-based flow control is implemented.
            This specifies the maximum amount of data that can be buffered.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Sockets.BluetoothSocketOptionName.GetReceiveBuffer">
            <summary>
            Returns maximum amount of data that can be buffered for a connection.
            This buffer size is used to compute number of credits granted to peer device when credit-based flow control is implemented.
            This specifies the maximum amount of data that can be buffered.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Sockets.BluetoothSocketOptionName.GetV24Break">
            <summary>
            Retrieves last v24 and break signals set through MSC command from peer device.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Sockets.BluetoothSocketOptionName.GetRls">
            <summary>
            Retrieves last line status signals set through RLS command from peer device.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Sockets.BluetoothSocketOptionName.SendMsc">
            <summary>
            Sends MSC command. V24 and breaks are as specified in RFCOMM Specification.
            Only modem signals and breaks can be controlled, RFCOMM reserved fields such as flow control are ignored and should be set to 0.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Sockets.BluetoothSocketOptionName.SendRls">
            <summary>
            Sends RLS command.
            Argument is as specified in RFCOMM Specification.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Sockets.BluetoothSocketOptionName.GetFlowType">
            <summary>
            Gets flow control type on the connected socket.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Sockets.BluetoothSocketOptionName.SetPageTimeout">
            <summary>
            Sets the page timeout for the card.
            The socket does not have to be connected.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Sockets.BluetoothSocketOptionName.GetPageTimeout">
            <summary>
            Gets the current page timeout.
            The socket does not have to be connected.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Sockets.BluetoothSocketOptionName.SetScan">
            <summary>
            Sets the scan mode for the card.
            The socket does not have to be connected.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Sockets.BluetoothSocketOptionName.GetScan">
            <summary>
            Gets the current scan mode.
            The socket does not have to be connected.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Sockets.BluetoothSocketOptionName.SetCod">
            <summary>
            Sets the class of the device.
            The socket does not have to be connected.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Sockets.BluetoothSocketOptionName.GetCod">
            <summary>
            Retrieve the Class of Device.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Sockets.BluetoothSocketOptionName.GetLocalVersion">
            <summary>
            Get the version information from the Bluetooth adapter.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Sockets.BluetoothSocketOptionName.GetRemoteVersion">
            <summary>
            Get the version of the remote adapter.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Sockets.BluetoothSocketOptionName.GetAuthenticationEnabled">
            <summary>
            Retrieves the authentication settings.
            The socket does not have to be connected.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Sockets.BluetoothSocketOptionName.SetAuthenticationEnabled">
            <summary>
            Sets the authentication policy of the device.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Sockets.BluetoothSocketOptionName.ReadRemoteName">
            <summary>
            Reads the remote name of the device.
            The socket does not have to be connected.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Sockets.BluetoothSocketOptionName.GetLinkPolicy">
            <summary>
            Retrieves the link policy of the device.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Sockets.BluetoothSocketOptionName.SetLinkPolicy">
            <summary>
            Sets the link policy for an existing baseband connection.
            The socket must be connected.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Sockets.BluetoothSocketOptionName.EnterHoldMode">
            <summary>
            Places the ACL connection to the specified peer device in HOLD mode.
            The device must be connected.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Sockets.BluetoothSocketOptionName.EnterSniffMode">
            <summary>
            Places the ACL connection to the specified peer device in SNIFF mode.
            The device must be connected.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Sockets.BluetoothSocketOptionName.ExitSniffMode">
            <summary>
            Forces the ACL connection to the peer device to leave SNIFF mode.
            The device must be connected.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Sockets.BluetoothSocketOptionName.EnterParkMode">
            <summary>
            Places the ACL connection to the peer device in PARK mode.
            The device must be connected.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Sockets.BluetoothSocketOptionName.ExitParkMode">
            <summary>
            Forces the ACL connection to the peer device to leave PARK mode.
            The device must be connected.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Sockets.BluetoothSocketOptionName.GetMode">
            <summary>
            Gets the current mode of the connection.
            The mode can either be sniff, park, or hold. The socket must be connected.
            </summary>
        </member>
        <member name="T:InTheHand.Net.Bluetooth.Widcomm.SDK_RETURN_CODE">
            <summary>
            "Define common return code for new SDK functions that would normally return BOOL"
            </summary>
            -
            <remarks>"Added BTW and SDK 5.0.1.1100".
            </remarks>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.Widcomm.SDK_RETURN_CODE.Success">
            <summary>
            "The call was successful"
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.Widcomm.SDK_RETURN_CODE.Fail">
            <summary>
            "Unspecified failure"
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.Widcomm.SDK_RETURN_CODE.NotSupported">
            <summary>
            "The API is not supported on the platform BTW stack version"
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.Widcomm.SDK_RETURN_CODE.Busy">
            <summary>
            "The API cannot complete at this time, but may be retried"
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.Widcomm.SDK_RETURN_CODE.InvalidParam">
            <summary>
            "One of the API parameters was invalid"
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.Widcomm.SDK_RETURN_CODE.ErrResources">
            <summary>
            "A necessary resource could not be obtained"
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.Widcomm.SDK_RETURN_CODE.Timeout">
            <summary>
            "The operation timed out before completion"
            </summary>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.BlueSoleil.Structs.BtSdkRemoteServiceAttrStru.#ctor(InTheHand.Net.Bluetooth.BlueSoleil.StackConsts.AttributeLookup,System.UInt16,System.Byte[],System.IntPtr)">
            <summary>
            for Test.
            </summary>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.BlueSoleil.Structs.BtSdkRmtSPPSvcExtAttrStru.#ctor(System.Byte)">
            <summary>
            for Test.
            </summary>
        </member>
        <member name="T:InTheHand.Windows.Forms.SelectBluetoothDeviceForm">
            <summary>
            Managed code dialog for Windows CE systems.
            </summary>
        </member>
        <member name="M:InTheHand.Windows.Forms.SelectBluetoothDeviceForm.Dispose(System.Boolean)">
            <summary>
            Clean up any resources being used.
            </summary>
        </member>
        <member name="M:InTheHand.Windows.Forms.SelectBluetoothDeviceForm.InitializeComponent">
            <summary>
            Required method for Designer support - do not modify
            the contents of this method with the code editor.
            </summary>
        </member>
        <member name="T:InTheHand.Net.ObexTransport">
            <summary>
            Supported network transports for Object Exchange.
            </summary>
        </member>
        <member name="F:InTheHand.Net.ObexTransport.IrDA">
            <summary>
            Infrared (IrDA)
            </summary>
        </member>
        <member name="F:InTheHand.Net.ObexTransport.Bluetooth">
            <summary>
            Bluetooth
            </summary>
        </member>
        <member name="F:InTheHand.Net.ObexTransport.Tcp">
            <summary>
            TCP/IP
            </summary>
        </member>
        <member name="T:InTheHand.Net.Sockets.IrDASocketOptionName">
            <summary>
            Socket option constants to set IrDA specific connection modes, and 
            get/set IrDA specific features.
            </summary>
            <remarks>
            Socket option constants to set IrDA specific connection modes, and 
            get/set IrDA specific features: 
            for instance to set IrLMP mode, or get the maximum send size.  Pass 
            to <see cref="M:System.Net.Sockets.Socket.GetSocketOption(System.Net.Sockets.SocketOptionLevel,System.Net.Sockets.SocketOptionName,System.Byte[])"/>/etc and
            <see cref="M:System.Net.Sockets.Socket.SetSocketOption(System.Net.Sockets.SocketOptionLevel,System.Net.Sockets.SocketOptionName,System.Byte[])"/>/etc,  
            along with optionLevel <c>IrDASocketOptionLevel.</c><see 
            cref="F:InTheHand.Net.Sockets.IrDASocketOptionLevel.IrLmp"/>; 
            see the examples below.
            <para><b>New in v1.5.51015</b></para>
            </remarks>
            <example><para>For instance, where <c>cli</c> is an instance of 
            <see cref="T:InTheHand.Net.Sockets.IrDAClient"/>.</para>
            In VB.NET, to set IrLMP mode (<c>IrLptMode</c>).
            <code lang="VB.NET">
            cli.Client.SetSocketOption(IrDASocketOptionLevel.Irlmp,  _
               IrDASocketOptionName.IrLptMode, _
               1) 'representing true; can use True itself in FXv2.
            </code>
            In C#, to retrieve the maximum send size.
            <code lang="C#">
            int maxSendSize = (int)cli.Client.GetSocketOption(
               IrDASocketOptionLevel.Irlmp,
               IrDASocketOptionName.SendPduLength);
            </code>
            </example>
        </member>
        <member name="F:InTheHand.Net.Sockets.IrDASocketOptionName.EnumDevice">
            <summary>
            Gets the list of discovered devices.  
            Is used internally by <c>IrDAClient.DiscoverDevices</c>.  
            </summary>
            <remarks>
            In native terms takes a <c>DEVICE_LIST</c> struct.
            </remarks>
        </member>
        <member name="F:InTheHand.Net.Sockets.IrDASocketOptionName.IasSet">
            <summary>
            Sets an entry in the local IAS (Information Access Service) database.
            </summary>
            <remarks>
            In native terms takes a <c>IAS_SET</c> struct.
            </remarks>
        </member>
        <member name="F:InTheHand.Net.Sockets.IrDASocketOptionName.IasQuery">
            <summary>
            Queries an entry in the peer's IAS (Information Access Service) database.
            </summary>
            <remarks>
            In native terms takes a <c>IAS_QUERY</c> struct.
            </remarks>
        </member>
        <member name="F:InTheHand.Net.Sockets.IrDASocketOptionName.SendPduLength">
            <summary>
            Retrieve the maximum send size when using IrLMP directly 
            (<see cref="F:InTheHand.Net.Sockets.IrDASocketOptionName.IrLptMode"/>).  
            IrLMP requires sent data to fit in one frame.
            </summary>
            <remarks>
            <c>Integer</c>
            </remarks>
        </member>
        <member name="F:InTheHand.Net.Sockets.IrDASocketOptionName.ExclusiveMode">
            <summary>
            Restricts the link to one application-level (IrLMP) connection; 
            for use when low latency is required.
            Returns an error on all tested platforms.
            </summary>
            <remarks>
            Returns an error on all tested platforms.  <c>Boolean</c>
            </remarks>
        </member>
        <member name="F:InTheHand.Net.Sockets.IrDASocketOptionName.IrLptMode">
            <summary>
            Sets IrLMP mode, disabling TinyTP.  Used for instance when 
            printing with IrLPT.
            </summary>
            <remarks>
            On Windows NT platforms at least, is ignored on server-side sockets.
            <c>Boolean</c>
            </remarks>
        </member>
        <member name="F:InTheHand.Net.Sockets.IrDASocketOptionName.NineWireMode">
            <summary>
            Sets IrCOMM 9-Wire/Cooked mode.  Used for instance when connecting 
            to the modem in a mobile phone (service name <c>IrDA:IrCOMM</c>).  
            </summary>
            <remarks>
            In operation, received IrCOMM control information is discarded and 
            null information is sent.
            <c>Boolean</c>
            </remarks>
        </member>
        <member name="F:InTheHand.Net.Sockets.IrDASocketOptionName.SharpMode">
            <summary>
            Reportedly sets non-IrDA Sharp ASK mode on the Windows CE 
            platform.  Presence unverified.
            </summary>
        </member>
        <member name="T:InTheHand.Net.Bluetooth.ServiceClass">
            <summary>
            Class of Service flags as assigned in the Bluetooth specifications.
            </summary>
            -
            <remarks>
            <para>Is returned by the property <see
            cref="P:InTheHand.Net.Bluetooth.ClassOfDevice.Service">ClassOfDevice.Service</see>.
            </para>
            <para>Defined in Bluetooth Specifications <see href="http://www.bluetooth.org/Technical/AssignedNumbers/baseband.htm"/>.
            </para>
            </remarks>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.ServiceClass.None">
            <summary>
            No service class bits set.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.ServiceClass.Information">
            <summary>
            
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.ServiceClass.Telephony">
            <summary>
            
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.ServiceClass.Audio">
            <summary>
            
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.ServiceClass.ObjectTransfer">
            <summary>
            
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.ServiceClass.Capturing">
            <summary>
            
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.ServiceClass.Rendering">
            <summary>
            
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.ServiceClass.Network">
            <summary>
            
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.ServiceClass.Positioning">
            <summary>
            
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.ServiceClass.LimitedDiscoverableMode">
            <summary>
            
            </summary>
        </member>
        <member name="T:InTheHand.Net.Bluetooth.DiscoverDevicesEventArgs">
            <summary>
            Provides data for the <see cref="E:InTheHand.Net.Bluetooth.BluetoothComponent.DiscoverDevicesComplete"/>
            event.
            </summary>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.DiscoverDevicesEventArgs.#ctor(InTheHand.Net.Sockets.BluetoothDeviceInfo[],System.Object)">
            <summary>
            Initialise a new instance.
            </summary>
            -
            <param name="devices">The result, may be empty but not null.
            </param>
            <param name="userState">Any user state object.
            </param>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.DiscoverDevicesEventArgs.#ctor(System.Exception,System.Object)">
            <summary>
            Initialise a new instance.
            </summary>
            -
            <param name="exception">The resultant error.
            </param>
            <param name="userState">Any user state object.
            </param>
        </member>
        <member name="P:InTheHand.Net.Bluetooth.DiscoverDevicesEventArgs.Devices">
            <summary>
            Gets the list of discovered Bluetooth devices.
            </summary>
        </member>
        <member name="T:InTheHand.Net.Bluetooth.Msft.WindowsBluetoothSecurity">
            <summary>
            Handles security between bluetooth devices.
            </summary>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.Msft.WindowsBluetoothSecurity.SetPin(InTheHand.Net.BluetoothAddress,System.String)">
            <summary>
            This function stores the personal identification number (PIN) for the Bluetooth device.
            </summary>
            <param name="device">Address of remote device.</param>
            <param name="pin">Pin, alphanumeric string of between 1 and 16 ASCII characters.</param>
            <remarks><para>On Windows CE platforms this calls <c>BthSetPIN</c>,
            its MSDN remarks say:
            </para>
            <para>&#x201C;Stores the pin for the Bluetooth device identified in pba.
            The active connection to the device is not necessary, nor is the presence
            of the Bluetooth controller. The PIN is persisted in the registry until
            BthRevokePIN is called.
            </para>
            <para>&#x201C;While the PIN is stored, it is supplied automatically
            after the PIN request is issued by the authentication mechanism, so the
            user will not be prompted for it. Typically, for UI-based devices, you
            would set the PIN for the duration of authentication, and then revoke
            it after authentication is complete.&#x201D;
            </para>
            <para>See also 
            <see cref="M:InTheHand.Net.Bluetooth.BluetoothSecurity.RevokePin(InTheHand.Net.BluetoothAddress)"/>
            </para>
            </remarks>
            <returns>True on success, else False.</returns>
            <seealso cref="M:InTheHand.Net.Bluetooth.BluetoothSecurity.RevokePin(InTheHand.Net.BluetoothAddress)"/>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.Msft.WindowsBluetoothSecurity.RevokePin(InTheHand.Net.BluetoothAddress)">
            <summary>
            This function revokes the personal identification number (PIN) for the Bluetooth device.
            </summary>
            <remarks><para>On Windows CE platforms this calls <c>BthRevokePIN</c>,
            its MSDN remarks say:
            </para>
            <para>&#x201C;When the PIN is revoked, it is removed from registry.
            The active connection to the device is not necessary, nor is the presence
            of the Bluetooth controller.&#x201D;
            </para>
            <para>On Windows CE platforms this removes any pending BluetoothWin32Authentication object but does not remove the PIN for an already authenticated device.
            Use RemoveDevice to ensure a pairing is completely removed.</para>
            <para>See also 
            <see cref="M:InTheHand.Net.Bluetooth.BluetoothSecurity.SetPin(InTheHand.Net.BluetoothAddress,System.String)"/>
            </para>
            </remarks>
            <param name="device">The remote device.</param>
            <returns>True on success, else False.</returns>
            <seealso cref="M:InTheHand.Net.Bluetooth.BluetoothSecurity.SetPin(InTheHand.Net.BluetoothAddress,System.String)"/>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.Msft.WindowsBluetoothSecurity.PairRequest(InTheHand.Net.BluetoothAddress,System.String)">
            <summary>
            Intiates pairing for a remote device.
            </summary>
            <param name="device">Remote device with which to pair.</param>
            <param name="pin">Chosen PIN code, must be between 1 and 16 ASCII characters.</param>
            <remarks><para>On Windows CE platforms this calls <c>BthPairRequest</c>,
            its MSDN remarks say:
            </para>
            <para>&#x201C;BthPairRequest passes the parameters to the <c>BthSetPIN</c>
            function and creates an ACL connection. Once the connection is established,
            it calls the <c>BthAuthenticate</c> function to authenticate the device.&#x201D;
            </para>
            <para>On Windows XP/Vista platforms this calls <c>BluetoothAuthenticateDevice</c>,
            if the pin argument is set to null a Wizard is displayed to accept a PIN from the user,
            otherwise the function executes in transparent mode.
            </para>
            <para>See also 
            <see cref="M:InTheHand.Net.Bluetooth.BluetoothSecurity.SetPin(InTheHand.Net.BluetoothAddress,System.String)"/>
            </para>
            </remarks>
            <returns>Whether the operation was successful.</returns>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.Msft.WindowsBluetoothSecurity.PairRequest(InTheHand.Net.BluetoothAddress,InTheHand.Net.Bluetooth.BluetoothAuthenticationRequirements)">
            <summary>
            Intiates pairing for a remote device
            with SSP if it is available.
            </summary>
            -
            <param name="device">Remote device with which to pair.</param>
            <param name="authenticationRequirement">
            Note: not supported by all platforms.
            </param>
            -
            <returns>Whether the operation was successful.</returns>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.Msft.WindowsBluetoothSecurity.RemoveDevice(InTheHand.Net.BluetoothAddress)">
            <summary>
            Remove the pairing with the specified device
            </summary>
            -
            <param name="device">Remote device with which to remove pairing.</param>
            -
            <returns>TRUE if device was successfully removed, else FALSE.</returns>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.Msft.WindowsBluetoothSecurity.SetLinkKey(InTheHand.Net.BluetoothAddress,System.Guid)">
            <summary>
            <para><b>Not supported on Windows XP</b></para>
            </summary>
            <param name="device"></param>
            <param name="linkkey"></param>
            <remarks><para>On Windows CE platforms this calls <c>BthSetLinkKey</c>,
            its MSDN remarks say:
            </para>
            <para>&#x201C;The link key is persisted in registry until <c>BthRevokeLinkKey</c>
            is called.
            </para>
            <para>&#x201C;Typically, the Bluetooth stack manages link keys automatically,
            for example, it stores them when they are created. This function is useful
            primarily for backup purposes.
            </para>
            <para>&#x201C;While link key is stored, it will be automatically supplied
            once the link key request is issued by the authentication mechanism. If
            the link key is incorrect, the renegotiation that involves the PIN is
            initiated by the Bluetooth adapter, and the PIN code may be requested
            from the user.
            </para>
            <para>&#x201C;The link key length is 16 bytes. You cannot create link
            keys; they are generated by the Bluetooth hardware.&#x201D;
            </para>
            </remarks>
            <returns></returns>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.Msft.WindowsBluetoothSecurity.GetPinRequest">
            <summary>
            Retrieves the address of the Bluetooth peer device authentication that requires the PIN code.
            <para><b>Not supported on Windows XP</b></para>
            </summary>
            <remarks><para>On Windows CE platforms this calls <c>BthGetPINRequest</c>,
            its MSDN remarks say:
            </para>
            <para>“There can be multiple requests outstanding. After the event
            that is provided by the UI handler is signaled, the UI handler must call
            this function multiple times until the call fails.”
            </para>
            <para>See also 
            <see cref="M:InTheHand.Net.Bluetooth.BluetoothSecurity.RefusePinRequest(InTheHand.Net.BluetoothAddress)"/>
            and <see cref="M:InTheHand.Net.Bluetooth.BluetoothSecurity.AnswerPinRequest(InTheHand.Net.BluetoothAddress,System.String)"/>
            </para>
            </remarks>
            <returns><see cref="T:InTheHand.Net.BluetoothAddress"/> of the remote device, or null if there is no outstanding PIN request.</returns>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.Msft.WindowsBluetoothSecurity.RefusePinRequest(InTheHand.Net.BluetoothAddress)">
            <summary>
            Refuses an outstanding PIN request.
            <para><b>Not supported on Windows XP</b></para>
            </summary>
            <param name="device">Address of the requesting device.</param>
            <remarks><para>On Windows CE platforms this calls <c>BthRefusePINRequest</c>,
            its MSDN remarks say:
            </para>
            <para>&#x201C;This function refuses an outstanding PIN request that is
            retrieved by <see cref="M:InTheHand.Net.Bluetooth.BluetoothSecurity.GetPinRequest()"/>
            function.&#x201D;
            </para>
            <para>See also 
            <see cref="M:InTheHand.Net.Bluetooth.BluetoothSecurity.GetPinRequest"/>
            and <see cref="M:InTheHand.Net.Bluetooth.BluetoothSecurity.AnswerPinRequest(InTheHand.Net.BluetoothAddress,System.String)"/>
            </para>
            </remarks>
        </member>
        <member name="T:InTheHand.Net.Bluetooth.BlueSoleil.BlueSoleilSocketException">
            <summary>
            SocketException holding a BlueSoleil error code from the original error,
            which is added to the exception message.
            </summary>
            -
            <remarks>
            Will always be internal so just catch SocketException as for the other stacks.
            </remarks>
        </member>
        <member name="T:InTheHand.Net.ObexWebResponse">
            <summary>
            Provides an OBEX implementation of the <see cref="T:System.Net.WebResponse"/> class.
            </summary>
        </member>
        <member name="M:InTheHand.Net.ObexWebResponse.GetResponseStream">
            <summary>
            Gets the stream used to read the body of the response from the server.
            </summary>
            -
            <returns>A <see cref="T:System.IO.Stream"/> containing the body of the response.</returns>
        </member>
        <member name="M:InTheHand.Net.ObexWebResponse.Close">
            <summary>
            Frees the resources held by the response.
            </summary>
        </member>
        <member name="M:InTheHand.Net.ObexWebResponse.WriteFile(System.String)">
            <summary>
            Writes the contents of the response to the specified file path.
            </summary>
            <param name="fileName">The filename (including the path) from which to read.</param>
        </member>
        <member name="P:InTheHand.Net.ObexWebResponse.Headers">
            <summary>
            Gets the headers associated with this response from the server.
            </summary>
        </member>
        <member name="P:InTheHand.Net.ObexWebResponse.ContentLength">
            <summary>
            Gets the length of the content returned by the request.
            </summary>
        </member>
        <member name="P:InTheHand.Net.ObexWebResponse.ContentType">
            <summary>
            Gets the content type of the response.
            </summary>
        </member>
        <member name="P:InTheHand.Net.ObexWebResponse.StatusCode">
            <summary>
            Returns a status code to indicate the outcome of the request.
            </summary>
            -
            <remarks><para>Note, if a error occurs locally then the status code
            <see cref="F:InTheHand.Net.ObexStatusCode.InternalServerError"/> is returned.
            Therefore that error code could signal local or remote errors.
            </para>
            </remarks>
        </member>
        <member name="T:InTheHand.Net.ObexListenerContext">
            <summary>
            Provides access to the request and response objects used by the <see cref="T:InTheHand.Net.ObexListener"/> class.
            </summary>
        </member>
        <member name="P:InTheHand.Net.ObexListenerContext.Request">
            <summary>
            Gets the <see cref="T:InTheHand.Net.ObexListenerRequest"/> that represents a client's request for a resource
            </summary>
        </member>
        <member name="T:InTheHand.Net.ObexListener">
            <summary>
            Provides a simple, programmatically controlled OBEX protocol listener.
            </summary>
        </member>
        <member name="M:InTheHand.Net.ObexListener.#ctor">
            <overloads>
            Initializes a new instance of the ObexListener class.
            </overloads>
            -
            <summary>
            Initializes a new instance of the ObexListener class using the Bluetooth transport.
            </summary>
        </member>
        <member name="M:InTheHand.Net.ObexListener.#ctor(InTheHand.Net.ObexTransport)">
            <summary>
            Initializes a new instance of the ObexListener class specifiying the transport to use.
            </summary>
            -
            <param name="transport">Specifies the transport protocol to use.
            </param>
        </member>
        <member name="M:InTheHand.Net.ObexListener.Start">
            <summary>
            Allows this instance to receive incoming requests.
            </summary>
        </member>
        <member name="M:InTheHand.Net.ObexListener.Stop">
            <summary>
            Causes this instance to stop receiving incoming requests.
            </summary>
        </member>
        <member name="M:InTheHand.Net.ObexListener.Close">
            <summary>
            Shuts down the ObexListener.
            </summary>
        </member>
        <member name="M:InTheHand.Net.ObexListener.GetContext">
            <summary>
            Waits for an incoming request and returns when one is received.
            </summary>
            -
            <remarks>
            <para>This method blocks waiting for a new connection.  It will
            return when a new connection completes or 
            <see cref="M:InTheHand.Net.ObexListener.Stop"/>/<see cref="M:InTheHand.Net.ObexListener.Close"/>
            has been called.
            </para>
            </remarks>
            -
            <returns>Returns a <see cref="T:InTheHand.Net.ObexListenerContext"/>
            or <see langword="null"/> if
            <see cref="M:InTheHand.Net.ObexListener.Stop"/>/<see cref="M:InTheHand.Net.ObexListener.Close"/>
            has been called.
            </returns>
        </member>
        <member name="P:InTheHand.Net.ObexListener.Authenticate">
            <summary>
            Get or set whether the transport connection (e.g. Bluetooth) will
            require Authentication.
            </summary>
            -
            <remarks>
            <para>Only Bluetooth supports this, TCP/IP and IrDA do not.
            On Bluetooth this uses <see cref="P:InTheHand.Net.Sockets.BluetoothListener.Authenticate">BluetoothListener.Authenticate</see>.
            </para>
            </remarks>
        </member>
        <member name="P:InTheHand.Net.ObexListener.Encrypt">
            <summary>
            Get or set whether the transport connection (e.g. Bluetooth) will
            require Encryption.
            </summary>
            -
            <remarks>
            <para>Only Bluetooth supports this, TCP/IP and IrDA do not.
            On Bluetooth this uses <see cref="P:InTheHand.Net.Sockets.BluetoothListener.Encrypt">BluetoothListener.Encrypt</see>.
            </para>
            </remarks>
        </member>
        <member name="P:InTheHand.Net.ObexListener.IsListening">
            <summary>
            Gets a value that indicates whether the <see cref="T:InTheHand.Net.ObexListener"/> has been started.
            </summary>
        </member>
        <member name="T:InTheHand.Net.Bluetooth.LanguageBaseItem">
            <summary>
            Represents a member of the SDP 
            <see cref="F:InTheHand.Net.Bluetooth.AttributeIds.UniversalAttributeId.LanguageBaseAttributeIdList"/>,
            Attribute
            which provides for multi-language strings in a record.
            </summary>
            <remarks>
            &#x201C;The 
            <see cref="F:InTheHand.Net.Bluetooth.AttributeIds.UniversalAttributeId.LanguageBaseAttributeIdList"/>
            attribute is a list in which each 
            member contains a language identifier, a character encoding identifier, and 
            a base attribute ID for each of the natural languages used in the service 
            record.&#x201D;
            </remarks>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.LanguageBaseItem.PrimaryLanguageBaseAttributeId">
            <summary>
            The primary language is specified to have base attribute ID 0x0100.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.LanguageBaseItem.Utf8EncodingId">
            <summary>
            The Id for the UTF-8 encoding.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.LanguageBaseItem.ErrorMsgLangBaseListParseNotU16">
            <exclude/>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.LanguageBaseItem.ErrorMsgLangBaseListParseBaseInvalid">
            <exclude/>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.LanguageBaseItem.ErrorMsgLangBaseListParseNotSequence">
            <exclude/>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.LanguageBaseItem.ErrorMsgLangBaseListParseNotInThrees">
            <exclude/>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.LanguageBaseItem.ErrorMsgFormatUnrecognizedEncodingId">
            <exclude/>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.LanguageBaseItem.ErrorMsgLangMustAsciiTwoChars">
            <exclude/>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.LanguageBaseItem.#ctor(System.UInt16,System.UInt16,System.UInt16)">
            <summary>
            Initialize a new instance of the <see cref="T:InTheHand.Net.Bluetooth.LanguageBaseItem"/> class.
            </summary>
            -
            <param name="naturalLanguage">The Natural Language field of the entry.
            Some example values are 0x656E which is "en", and 0x6672 which is "fr".
            </param>
            <param name="encodingId">The IETF Charset identifier for this language.
            e.g. 3 for US-ASCII and 106 for UTF-8,
            see <see cref="P:InTheHand.Net.Bluetooth.LanguageBaseItem.EncodingId"/>
            </param>
            <param name="baseAttributeId">The base Attribute Id for this language
            in the record.
            e.g. 0x100 for the Primary language.
            </param>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.LanguageBaseItem.#ctor(System.Int16,System.Int16,System.Int16)">
            <summary>
            Initialize a new instance of the <see cref="T:InTheHand.Net.Bluetooth.LanguageBaseItem"/> class.
            </summary>
            -
            <param name="naturalLanguage">The Natural Language field of the entry.
            Some example values are 0x656E which is "en", and 0x6672 which is "fr".
            </param>
            <param name="encodingId">The IETF Charset identifier for this language.
            e.g. 3 for US-ASCII and 106 for UTF-8,
            see <see cref="P:InTheHand.Net.Bluetooth.LanguageBaseItem.EncodingId"/>
            </param>
            <param name="baseAttributeId">The base Attribute Id for this language
            in the record.
            e.g. 0x100 for the Primary language.
            </param>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.LanguageBaseItem.#ctor(System.UInt16,System.UInt16,InTheHand.Net.Bluetooth.ServiceAttributeId)">
            <overloads>
            Initialize a new instance of the <see cref="T:InTheHand.Net.Bluetooth.LanguageBaseItem"/> class.
            </overloads>
            -
            <summary>
            Initialize a new instance of the <see cref="T:InTheHand.Net.Bluetooth.LanguageBaseItem"/> class.
            </summary>
            -
            <param name="naturalLanguage">The Natural Language field of the entry.
            Some example values are 0x656E which is "en", and 0x6672 which is "fr".
            </param>
            <param name="encodingId">The IETF Charset identifier for this language.
            e.g. 3 for US-ASCII and 106 for UTF-8,
            see <see cref="P:InTheHand.Net.Bluetooth.LanguageBaseItem.EncodingId"/>
            </param>
            <param name="baseAttributeId">The base Attribute Id for this language
            in the record.
            e.g. 0x100 for the Primary language.
            </param>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.LanguageBaseItem.#ctor(System.Int16,System.Int16,InTheHand.Net.Bluetooth.ServiceAttributeId)">
            <summary>
            Initialize a new instance of the <see cref="T:InTheHand.Net.Bluetooth.LanguageBaseItem"/> class.
            </summary>
            -
            <param name="naturalLanguage">The Natural Language field of the entry.
            Some example values are 0x656E which is "en", and 0x6672 which is "fr".
            </param>
            <param name="encodingId">The IETF Charset identifier for this language.
            e.g. 3 for US-ASCII and 106 for UTF-8,
            see <see cref="P:InTheHand.Net.Bluetooth.LanguageBaseItem.EncodingId"/>
            </param>
            <param name="baseAttributeId">The base Attribute Id for this language
            in the record.
            e.g. 0x100 for the Primary language.
            </param>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.LanguageBaseItem.#ctor(System.String,System.UInt16,InTheHand.Net.Bluetooth.ServiceAttributeId)">
            <summary>
            Initialize a new instance of the <see cref="T:InTheHand.Net.Bluetooth.LanguageBaseItem"/> class.
            </summary>
            -
            <param name="naturalLanguage">The Natural Language field of the entry.
            Some example values are "en", and "fr".
            </param>
            <param name="encodingId">The IETF Charset identifier for this language.
            e.g. 3 for US-ASCII and 106 for UTF-8,
            see <see cref="P:InTheHand.Net.Bluetooth.LanguageBaseItem.EncodingId"/>
            </param>
            <param name="baseAttributeId">The base Attribute Id for this language
            in the record.
            e.g. 0x100 for the Primary language.
            </param>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.LanguageBaseItem.#ctor(System.String,System.Int16,InTheHand.Net.Bluetooth.ServiceAttributeId)">
            <summary>
            Initialize a new instance of the <see cref="T:InTheHand.Net.Bluetooth.LanguageBaseItem"/> class.
            </summary>
            -
            <param name="naturalLanguage">The Natural Language field of the entry.
            Some example values are "en", and "fr".
            </param>
            <param name="encodingId">The IETF Charset identifier for this language.
            e.g. 3 for US-ASCII and 106 for UTF-8,
            see <see cref="P:InTheHand.Net.Bluetooth.LanguageBaseItem.EncodingId"/>
            </param>
            <param name="baseAttributeId">The base Attribute Id for this language
            in the record.
            e.g. 0x100 for the Primary language.
            </param>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.LanguageBaseItem.ParseListFromElementSequence(InTheHand.Net.Bluetooth.ServiceElement)">
            <summary>
            Gets the list of <see cref="T:InTheHand.Net.Bluetooth.LanguageBaseItem"/>
            items in the service record.
            </summary>
            -
            <param name="elementSequence">
            A <see cref="T:InTheHand.Net.Bluetooth.ServiceElement"/> holding the 
            data from the 
            <see cref="F:InTheHand.Net.Bluetooth.AttributeIds.UniversalAttributeId.LanguageBaseAttributeIdList"/>
            attribute.
            </param>
            -
            <returns>
            An array of <see cref="T:InTheHand.Net.Bluetooth.LanguageBaseItem"/>.  
            An array length zero is returned if the service record contains no such attribute.
            </returns>
            -
            <exception cref="T:System.ArgumentException">
            <paramref name="elementSequence"/> is not of type 
            <see cref="F:InTheHand.Net.Bluetooth.ElementType.ElementSequence"/>.
            </exception>
            <exception cref="T:System.Net.ProtocolViolationException">
            The element sequence contains incorrectly formatted or invalid content,
            for example it contains the wrong element data types, or doesn't contain
            the elements in groups of three as required.
            </exception>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.LanguageBaseItem.CreateElementSequenceFromList(InTheHand.Net.Bluetooth.LanguageBaseItem[])">
            <summary>
            Create a data element for the 
            <see cref="F:InTheHand.Net.Bluetooth.AttributeIds.UniversalAttributeId.LanguageBaseAttributeIdList"/>
            attribute
            from the list of <see cref="T:InTheHand.Net.Bluetooth.LanguageBaseItem"/>
            </summary>
            -
            <param name="list">
            An array of <see cref="T:InTheHand.Net.Bluetooth.LanguageBaseItem"/>.
            </param>
            -
            <returns>
            A <see cref="T:InTheHand.Net.Bluetooth.ServiceElement"/> holding the 
            <see cref="F:InTheHand.Net.Bluetooth.AttributeIds.UniversalAttributeId.LanguageBaseAttributeIdList"/>
            element, to be added to a generally the 
            <see cref="T:InTheHand.Net.Bluetooth.ServiceRecord"/>.
            </returns>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.LanguageBaseItem.CreateEnglishUtf8PrimaryLanguageItem">
            <summary>
            Create a <see cref="T:InTheHand.Net.Bluetooth.LanguageBaseItem"/> instance
            for a primary language of English and a string encoding of UTF-8.
            </summary>
            <returns>The <see cref="T:InTheHand.Net.Bluetooth.LanguageBaseItem"/> instance.
            </returns>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.LanguageBaseItem.GetEncoding">
            <summary>
            Gets an <see cref="T:System.Text.Encoding"/> appropriate for this language base item.
            </summary>
            -
            <returns>The <see cref="T:System.Text.Encoding"/>
            appropriate for this language base item.
            </returns>
            -
            <remarks>
            <para>We support the following set of mappings from encoding id to .NET
            Encoding name.
            <list type="table">
            <listheader><term>Id</term><description>Encoding</description></listheader>
            <item><term>3</term><description>us-ascii</description></item>
            <item><term>4</term><description>iso-8859-1</description></item>
            <item><term>5</term><description>iso-8859-2</description></item>
            <item><term>6</term><description>iso-8859-3</description></item>
            <item><term>7</term><description>iso-8859-4</description></item>
            <item><term>8</term><description>iso-8859-5</description></item>
            <item><term>9</term><description>iso-8859-6</description></item>
            <item><term>10</term><description>iso-8859-7</description></item>
            <item><term>11</term><description>iso-8859-8</description></item>
            <item><term>12</term><description>iso-8859-9</description></item>
            <item><term>13</term><description>iso-8859-10</description></item>
            <item><term>106 (0x006a)</term><description>UTF-8</description></item>
            <item><term>109</term><description>iso-8859-13</description></item>
            <item><term>110</term><description>iso-8859-14</description></item>
            <item><term>111</term><description>iso-8859-15</description></item>
            <item><term>112</term><description>iso-8859-16</description></item>
            <item><term>1013 (0x03f5)</term><description>unicodeFFFE (UTF-16BE)</description></item>
            <item><term>1014</term><description>utf-16 (UTF-16LE)</description></item>
            <item><term>1015</term><description>utf-16 (UTF-16, we assume UTF16-LE)</description></item>
            <item><term>2252 to 2258 (0x08cc to 0x08d2)</term><description>windows-1252 to Windows-1258</description></item>
            </list>
            Note that not all platforms support all these Encodings, for instance on
            my Windows XP SP2 box iso-8859-10/-14/-16 are not supported.  On NETCF on
            Windows Mobile 5 only five of the ISO-8859 encodings are supported.
            Regardless I've seen no SDP records that use ISO-8859 encodings so this is 
            not a problem, most records actually use UTF-8.
            </para>
            </remarks>
            -
            <exception cref="T:System.NotSupportedException">
            The IETF encoding id for this language base item is currently unknown.
            If valid, add it to the <c>s_IetfCharsetIdToDotNetEncodingNameTable</c> table, 
            providing a mapping to its Windows code page name.
            </exception>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.LanguageBaseItem.TestAllDefinedEncodingMappingRows(System.Int32@,System.Int32@)">
            <exclude/>
        </member>
        <member name="P:InTheHand.Net.Bluetooth.LanguageBaseItem.NaturalLanguage">
            <summary>
            Gets the value of the Natural Language field of the entry.
            </summary>
            <example>Some example value may be "en", and "fr".</example>
        </member>
        <member name="P:InTheHand.Net.Bluetooth.LanguageBaseItem.NaturalLanguageAsUInt16">
            <summary>
            Gets the value of the Natural Language field of the entry, as a <see cref="T:System.UInt16"/>.
            </summary>
            <example>Some example value may be 0x656e for "en", and 0x6672 for "fr".</example>
        </member>
        <member name="P:InTheHand.Net.Bluetooth.LanguageBaseItem.NaturalLanguageAsInt16">
            <summary>
            Gets the value of the Natural Language field of the entry, as a <see cref="T:System.UInt16"/>.
            </summary>
            <example>Some example value may be 0x656e for "en", and 0x6672 for "fr".</example>
        </member>
        <member name="P:InTheHand.Net.Bluetooth.LanguageBaseItem.AttributeIdBase">
            <summary>
            Gets the base Attribute Id for this language.
            </summary>
        </member>
        <member name="P:InTheHand.Net.Bluetooth.LanguageBaseItem.EncodingId">
            <summary>
            Get the IETF Charset identifier for this language.
            </summary>
            -
            <remarks>
            <para>Example values are 3 for US-ASCII and 106 for UTF-8.
            See the full list at <see href="http://www.iana.org/assignments/character-sets"/>
            </para>
            </remarks>
            -
            <seealso cref="P:InTheHand.Net.Bluetooth.LanguageBaseItem.EncodingIdAsInt16"/>
        </member>
        <member name="P:InTheHand.Net.Bluetooth.LanguageBaseItem.EncodingIdAsInt16">
            <summary>
            Get the IETF Charset identifier for this language, as an Int16.
            </summary>
            -
            <remarks>
            <para>
            See <see cref="P:InTheHand.Net.Bluetooth.LanguageBaseItem.EncodingId"/>.
            </para>
            </remarks>
            -
            <seealso cref="P:InTheHand.Net.Bluetooth.LanguageBaseItem.EncodingId"/>
        </member>
        <member name="T:InTheHand.Net.Bluetooth.RadioMode">
            <summary>
            Determine all the possible modes of operation of the Bluetooth radio.
            </summary>
            -
            <remarks>See <see cref="P:InTheHand.Net.Bluetooth.BluetoothRadio.Mode">BluetoothRadio.Mode</see>
            for what is supported on what platforms.  For instance setting the mode
            is not supported on Widcomm+Win32.  On Widcomm WM/CE setting <c>PowerOff</c>
            actually sets 'CONNECT_ALLOW_NONE', and not actually disabled/off.
            Also when the stack is disabled, setting connectable/discoverable 
            does not manage to turn the radio on.
            </remarks>
            -
            <seealso cref="P:InTheHand.Net.Bluetooth.BluetoothRadio.Mode">BluetoothRadio.Mode</seealso>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.RadioMode.PowerOff">
            <summary>
            Bluetooth is disabled on the device.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.RadioMode.Connectable">
            <summary>
            Bluetooth is connectable but your device cannot be discovered by other devices.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.RadioMode.Discoverable">
            <summary>
            Bluetooth is activated and fully discoverable.
            </summary>
        </member>
        <member name="T:InTheHand.Net.Bluetooth.BluetoothService">
            <summary>
            Standard Bluetooth Profile identifiers.
            </summary>
            -
            <remarks>
            <para>See the list at <see href="http://www.bluetooth.org/Technical/AssignedNumbers/service_discovery.htm"/>.
            </para>
            <para>The Bluetooth Base UUID is {00000000-0000-1000-8000-00805F9B34FB}
            </para>
            </remarks>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothService.Empty">
            <summary>
            Represents an empty service Guid.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothService.BluetoothBase">
            <summary>
            Represents the base Guid from which all standard Bluetooth profiles are derived - not used for connections.
            Is {00000000-0000-1000-8000-00805F9B34FB}
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothService.SdpProtocol">
            <summary>
            [0x0001]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothService.UdpProtocol">
            <summary>
            [0x0002]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothService.RFCommProtocol">
            <summary>
            [0x0003]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothService.TcpProtocol">
            <summary>
            [0x0004]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothService.TcsBinProtocol">
            <summary>
            [0x0005]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothService.TcsAtProtocol">
            <summary>
            [0x0006]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothService.AttProtocol">
            <summary>
            [0x0008]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothService.ObexProtocol">
            <summary>
            [0x0008]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothService.IPProtocol">
            <summary>
            [0x0009]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothService.FtpProtocol">
            <summary>
            [0x000A]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothService.HttpProtocol">
            <summary>
            [0x000C]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothService.WspProtocol">
            <summary>
            [0x000E]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothService.BnepProtocol">
            <summary>
            [0x000F]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothService.UpnpProtocol">
            <summary>
            [0x0010]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothService.HidpProtocol">
            <summary>
            [0x0011]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothService.HardcopyControlChannelProtocol">
            <summary>
            [0x0012]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothService.HardcopyDataChannelProtocol">
            <summary>
            [0x0014]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothService.HardcopyNotificationProtocol">
            <summary>
            [0x0016]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothService.AvctpProtocol">
            <summary>
            [0x0017]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothService.AvdtpProtocol">
            <summary>
            [0x0019]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothService.CmtpProtocol">
            <summary>
            [0x001B]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothService.UdiCPlaneProtocol">
            <summary>
            [0x001D] ?????
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothService.McapControlChannelProtocol">
            <summary>
            [0x001E]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothService.McapDataChannelProtocol">
            <summary>
            [0x001F]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothService.L2CapProtocol">
            <summary>
            [0x0100]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothService.ServiceDiscoveryServer">
            <summary>
            [0x1000]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothService.BrowseGroupDescriptor">
            <summary>
            [0x1001]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothService.PublicBrowseGroup">
            <summary>
            [0x1002]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothService.SerialPort">
            <summary>
            Provides a basic Serial emulation connect over Bluetooth. [0x1101]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothService.LanAccessUsingPpp">
            <summary>
            Used to establish PPP connections over RFComm channels. [0x1102]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothService.DialupNetworking">
            <summary>
            [0x1103]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothService.IrMCSync">
            <summary>
            [0x1104]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothService.ObexObjectPush">
            <summary>
            Used for sending binary objects between devices.[0x1105]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothService.ObexFileTransfer">
            <summary>
            OBEX version of an FTP server [0x1106]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothService.IrMCSyncCommand">
            <summary>
            [0x1107]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothService.Headset">
            <summary>
            HSP (Headset Profile) — Supports Bluetooth headset devices.[0x1108]
            See also 
            <see cref="F:InTheHand.Net.Bluetooth.BluetoothService.HeadsetHeadset"/>
            <see cref="F:InTheHand.Net.Bluetooth.BluetoothService.HeadsetAudioGateway"/>
            </summary>
            <seealso cref="F:InTheHand.Net.Bluetooth.BluetoothService.HeadsetHeadset"/>
            <seealso cref="F:InTheHand.Net.Bluetooth.BluetoothService.HeadsetAudioGateway"/>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothService.CordlessTelephony">
            <summary>
            [0x1109]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothService.AudioSource">
            <summary>
            [0x110A]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothService.AudioSink">
            <summary>
            [0x110B]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothService.AVRemoteControlTarget">
            <summary>
            [0x110C]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothService.AdvancedAudioDistribution">
            <summary>
            [0x110D]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothService.AVRemoteControl">
            <summary>
            [0x110E]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothService.AVRemoteControlController">
            <summary>
            [0x110F]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothService.Intercom">
            <summary>
            [0x1110]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothService.Fax">
            <summary>
            [0x1111]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothService.HeadsetAudioGateway">
            <summary>
            [0x1112]
            See also
            <see cref="F:InTheHand.Net.Bluetooth.BluetoothService.Headset"/>
            <see cref="F:InTheHand.Net.Bluetooth.BluetoothService.HeadsetHeadset"/>
            </summary>
            <seealso cref="F:InTheHand.Net.Bluetooth.BluetoothService.Headset"/>
            <seealso cref="F:InTheHand.Net.Bluetooth.BluetoothService.HeadsetHeadset"/>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothService.Wap">
            <summary>
            [0x1113]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothService.WapClient">
            <summary>
            [0x1114]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothService.Panu">
            <summary>
            [0x1115]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothService.Nap">
            <summary>
            [0x1116]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothService.GN">
            <summary>
            [0x1117]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothService.DirectPrinting">
            <summary>
            [0x1118]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothService.ReferencePrinting">
            <summary>
            [0x1119]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothService.Imaging">
            <summary>
            [0x111A]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothService.ImagingResponder">
            <summary>
            [0x111B]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothService.ImagingAutomaticArchive">
            <summary>
            [0x111C]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothService.ImagingReferenceObjects">
            <summary>
            [0x111D]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothService.Handsfree">
            <summary>
            Supports hands free kits such as a car kits which provide audio and more advanced call control than the Headset profile. [0x111E]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothService.HandsfreeAudioGateway">
            <summary>
            [0x111F]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothService.DirectPrintingReferenceObjects">
            <summary>
            [0x1120]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothService.ReflectedUI">
            <summary>
            [0x1121]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothService.BasicPrinting">
            <summary>
            Used for printing simple text, HTML, vCard objects and similar. [0x1122]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothService.PrintingStatus">
            <summary>
             [0x1123]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothService.HumanInterfaceDevice">
            <summary>
            Supports human interface devices such as keyboards and mice. [0x1124]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothService.HardcopyCableReplacement">
            <summary>
             [0x1125]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothService.HardcopyCableReplacementPrint">
            <summary>
             [0x1126]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothService.HardcopyCableReplacementScan">
            <summary>
             [0x1127]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothService.CommonIsdnAccess">
            <summary>
            Common_ISDN_Access [0x1128]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothService.VideoConferencingGW">
            <summary>
             [0x1129]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothService.UdiMT">
            <summary>
            UDI_MT [0x112A]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothService.UdiTA">
            <summary>
            UDI_TA [0x112B]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothService.AudioVideo">
            <summary>
             [0x112C]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothService.SimAccess">
            <summary>
            SIM_Access [0x112D]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothService.PhonebookAccessPce">
            <summary>
            Phonebook Access - PCE [0x112E]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothService.PhonebookAccessPse">
            <summary>
            Phonebook Access - PSE [0x112F]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothService.PhonebookAccess">
            <summary>
            Phonebook Access [0x1130]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothService.HeadsetHeadset">
            <summary>
            Headset [0x1131]
            See also
            <see cref="F:InTheHand.Net.Bluetooth.BluetoothService.Headset"/>
            <see cref="F:InTheHand.Net.Bluetooth.BluetoothService.HeadsetAudioGateway"/>
            </summary>
            <seealso cref="F:InTheHand.Net.Bluetooth.BluetoothService.Headset"/>
            <seealso cref="F:InTheHand.Net.Bluetooth.BluetoothService.HeadsetAudioGateway"/>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothService.MessageAccessServer">
            <summary>
            Message Access Server [0x1132]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothService.MessageNotificationServer">
            <summary>
            Message Notification Server [0x1133]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothService.MessageAccessProfile">
            <summary>
            Message Access Profile [0x1134]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothService.PnPInformation">
            <summary>
            Bluetooth Device Identification. [0x1200]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothService.GenericNetworking">
            <summary>
             [0x1201]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothService.GenericFileTransfer">
            <summary>
             [0x1202]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothService.GenericAudio">
            <summary>
             [0x1203]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothService.GenericTelephony">
            <summary>
             [0x1204]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothService.UPnp">
            <summary>
             [0x1205]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothService.UPnpIP">
            <summary>
             [0x1206]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothService.UPnpIPPan">
            <summary>
            ESDP_UPNP_IP_PAN [0x1300]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothService.UPnpIPLap">
            <summary>
            ESDP_UPNP_IP_LAP [0x1301]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothService.UPnpIPL2Cap">
            <summary>
            ESDP_UPNP_L2CAP [0x1302]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothService.VideoSource">
            <summary>
            Video Distribution Profile - Source [0x1303]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothService.VideoSink">
            <summary>
            Video Distribution Profile - Sink [0x1304]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothService.VideoDistribution">
            <summary>
            Video Distribution Profile [0x1305]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothService.HealthDevice">
            <summary>
            Health Device Profile (HDP) [0x1400]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothService.HealthDeviceSource">
            <summary>
            Health Device Profile (HDP) - Source [0x1401]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothService.HealthDeviceSink">
            <summary>
            Health Device Profile (HDP) - Sink [0x1402]
            </summary>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.BluetoothService.GetName(System.Guid)">
            <summary>
            Retrieves the name of the Service Class UUID that has the specified value. 
            </summary>
            <param name="uuid">
            The service class UUID as a <see cref="T:System.Guid"/>.
            </param>
            <returns>
            A string containing the name of the service class whose UUID value is <paramref name="uuid"/>,
            or a null reference (<c>Nothing</c> in Visual Basic) if no such constant is found.
            </returns>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.BluetoothService.GetName(System.Int16)">
            <summary>
            Retrieves the name of the Service Class UUID that has the specified value. 
            </summary>
            <param name="uuid16">
            The service class UUID in the 16-bit UUID short form as a <see cref="T:System.Int16"/>.
            </param>
            <returns>
            A string containing the name of the service class whose UUID value is <paramref name="uuid"/>,
            or a null reference (<c>Nothing</c> in Visual Basic) if no such constant is found.
            </returns>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.BluetoothService.GetName(System.UInt16)">
            <summary>
            Retrieves the name of the Service Class UUID that has the specified value. 
            </summary>
            <param name="uuid16">
            The service class UUID in the 16-bit short UUID form as a <see cref="T:System.UInt16"/>.
            </param>
            <returns>
            A string containing the name of the service class whose UUID value is <paramref name="uuid"/>,
            or a null reference (<c>Nothing</c> in Visual Basic) if no such constant is found.
            </returns>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.BluetoothService.GetName(System.Int32)">
            <summary>
            Retrieves the name of the Service Class UUID that has the specified value. 
            </summary>
            <param name="uuid32">
            The service class UUID in the 32-bit short UUID form as a <see cref="T:System.Int32"/>.
            </param>
            <returns>
            A string containing the name of the service class whose UUID value is <paramref name="uuid"/>,
            or a null reference (<c>Nothing</c> in Visual Basic) if no such constant is found.
            </returns>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.BluetoothService.GetName(System.UInt32)">
            <summary>
            Retrieves the name of the Service Class UUID that has the specified value. 
            </summary>
            <param name="uuid32">
            The service class UUID in the 32-bit UUID short form as a <see cref="T:System.UInt32"/>.
            </param>
            <returns>
            A string containing the name of the service class whose UUID value is <paramref name="uuid"/>,
            or a null reference (<c>Nothing</c> in Visual Basic) if no such constant is found.
            </returns>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.BluetoothService.CreateBluetoothUuid(System.Int16)">
            <summary>
            Create a full 128-bit Service class UUID from its 16-bit short form.
            </summary>
            <param name="uuid16">
            The service class UUID in the 16-bit UUID short form as a <see cref="T:System.Int16"/>.
            </param>
            <returns>
            A <see cref="T:System.Guid"/> containing the full 128-bit form of the
            supplied Bluetooth service class UUID.
            </returns>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.BluetoothService.CreateBluetoothUuid(System.UInt16)">
            <summary>
            Create a full 128-bit Service class UUID from its 16-bit short form.
            </summary>
            <param name="uuid16">
            The service class UUID in the 16-bit UUID short form as a <see cref="T:System.UInt16"/>.
            </param>
            <returns>
            A <see cref="T:System.Guid"/> containing the full 128-bit form of the
            supplied Bluetooth service class UUID.
            </returns>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.BluetoothService.CreateBluetoothUuid(System.Int32)">
            <summary>
            Create a full 128-bit Service class UUID from its 16-bit short form.
            </summary>
            <param name="uuid32">
            The service class UUID in the 32-bit UUID short form as a <see cref="T:System.Int32"/>.
            </param>
            <returns>
            A <see cref="T:System.Guid"/> containing the full 128-bit form of the
            supplied Bluetooth service class UUID.
            </returns>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.BluetoothService.CreateBluetoothUuid(System.UInt32)">
            <summary>
            Create a full 128-bit Service class UUID from its 16-bit short form.
            </summary>
            <param name="uuid32">
            The service class UUID in the 32-bit UUID short form as a <see cref="T:System.UInt32"/>.
            </param>
            <returns>
            A <see cref="T:System.Guid"/> containing the full 128-bit form of the
            supplied Bluetooth service class UUID.
            </returns>
        </member>
        <member name="T:InTheHand.Net.Bluetooth.BluetoothAuthenticationRequirements">
            <summary>
            The AUTHENTICATION_REQUIREMENTS enumeration specifies the 'Man in the Middle' protection required for authentication.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothAuthenticationRequirements.MITMProtectionNotRequired">
            <summary>
            Protection against a "Man in the Middle" attack is not required for authentication.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothAuthenticationRequirements.MITMProtectionRequired">
            <summary>
            Protection against a "Man in the Middle" attack is required for authentication.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothAuthenticationRequirements.MITMProtectionNotRequiredBonding">
            <summary>
            Protection against a "Man in the Middle" attack is not required for bonding.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothAuthenticationRequirements.MITMProtectionRequiredBonding">
            <summary>
            Protection against a "Man in the Middle" attack is required for bonding.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothAuthenticationRequirements.MITMProtectionNotRequiredGeneralBonding">
            <summary>
            Protection against a "Man in the Middle" attack is not required for General Bonding.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothAuthenticationRequirements.MITMProtectionRequiredGeneralBonding">
            <summary>
            Protection against a "Man in the Middle" attack is required for General Bonding.
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.BluetoothAuthenticationRequirements.MITMProtectionNotDefined">
            <summary>
            Protection against "Man in the Middle" attack is not defined.
            </summary>
        </member>
        <member name="T:InTheHand.Net.Bluetooth.Widcomm.SdpService.DESC_TYPE">
            <summary>
            Define for service attribute, all the 'Descriptor Type' values.
            These are also referred to as 'attribute type' values
            </summary>
        </member>
        <member name="T:InTheHand.Windows.Forms.SelectBluetoothDeviceDialog">
            <summary>
            Provides a form to select an available Bluetooth device.
            </summary>
        </member>
        <member name="M:InTheHand.Windows.Forms.SelectBluetoothDeviceDialog.#ctor">
            <summary>
            Initializes an instance of the <see cref="T:InTheHand.Windows.Forms.SelectBluetoothDeviceDialog"/> class.
            </summary>
        </member>
        <member name="M:InTheHand.Windows.Forms.SelectBluetoothDeviceDialog.Reset">
            <summary>
            Resets the properties of the <see cref="T:InTheHand.Windows.Forms.SelectBluetoothDeviceDialog"/> to their default values.
            </summary>
        </member>
        <member name="M:InTheHand.Windows.Forms.SelectBluetoothDeviceDialog.ShowCustomDialog">
            <summary>
            
            </summary>
            <returns></returns>
        </member>
        <member name="M:InTheHand.Windows.Forms.SelectBluetoothDeviceDialog.RunDialog(System.IntPtr)">
            <summary>
            Specifies a common dialog box.
            </summary>
            <param name="hwndOwner">A value that represents the window handle of the owner window for the common dialog box.</param>
            <returns>true if the dialog box was successfully run; otherwise, false.</returns>
        </member>
        <member name="M:InTheHand.Windows.Forms.SelectBluetoothDeviceDialog.Dispose(System.Boolean)">
            <exclude/>
        </member>
        <member name="P:InTheHand.Windows.Forms.SelectBluetoothDeviceDialog.AddNewDeviceWizard">
            <summary>
            If TRUE, invokes the Add New Device Wizard.
            </summary>
            <remarks>Supported only on Windows XP/Vista with Microsoft stack.</remarks>
        </member>
        <member name="P:InTheHand.Windows.Forms.SelectBluetoothDeviceDialog.SkipServicesPage">
            <summary>
            If TRUE, skips the Services page in the Add New Device Wizard.
            </summary>
            <remarks>Supported only on Windows XP/Vista with Microsoft stack.</remarks>
        </member>
        <member name="P:InTheHand.Windows.Forms.SelectBluetoothDeviceDialog.Info">
            <summary>
            Gets or sets the information text.
            </summary>
            <remarks></remarks>
        </member>
        <member name="P:InTheHand.Windows.Forms.SelectBluetoothDeviceDialog.ClassOfDevices">
            <summary>
            Array of class of devices to find.
            </summary>
            <remarks>Clear the collection to return all devices.</remarks>
        </member>
        <member name="P:InTheHand.Windows.Forms.SelectBluetoothDeviceDialog.SelectedDevice">
            <summary>
            Gets the selected Bluetooth device.
            </summary>
        </member>
        <member name="P:InTheHand.Windows.Forms.SelectBluetoothDeviceDialog.ShowAuthenticated">
            <summary>
            If TRUE, authenticated devices are shown in the picker.
            </summary>
        </member>
        <member name="P:InTheHand.Windows.Forms.SelectBluetoothDeviceDialog.ShowRemembered">
            <summary>
            If TRUE, remembered devices are shown in the picker.
            </summary>
        </member>
        <member name="P:InTheHand.Windows.Forms.SelectBluetoothDeviceDialog.ShowUnknown">
            <summary>
            If TRUE, unknown devices are shown in the picker.
            </summary>
        </member>
        <member name="P:InTheHand.Windows.Forms.SelectBluetoothDeviceDialog.ForceAuthentication">
            <summary>
            If TRUE, forces authentication before returning.
            </summary>
            <remarks></remarks>
        </member>
        <member name="P:InTheHand.Windows.Forms.SelectBluetoothDeviceDialog.ShowDiscoverableOnly">
            <summary>
            If TRUE, only devices which are currently discoverable are shown in the picker.
            </summary>
            <remarks>
            <note>Does <strong>not</strong> work on the Microsoft stack on desktop Windows.
            There, when true the dialog will not open and will return an error to the caller.
            </note>
            </remarks>
        </member>
        <member name="P:InTheHand.Windows.Forms.SelectBluetoothDeviceDialog.DiscoverableOnly">
            <summary>
            Obsolete, use <see cref="P:InTheHand.Windows.Forms.SelectBluetoothDeviceDialog.ShowDiscoverableOnly"/>
            instead.
            If TRUE, only devices which are currently discoverable are shown in the picker.
            </summary>
            <remarks>
            <para>Obsolete, use <see cref="P:InTheHand.Windows.Forms.SelectBluetoothDeviceDialog.ShowDiscoverableOnly"/>
            instead.
            </para>
            </remarks>
            <seealso cref="P:InTheHand.Windows.Forms.SelectBluetoothDeviceDialog.ShowDiscoverableOnly"/>
        </member>
        <member name="P:InTheHand.Windows.Forms.SelectBluetoothDeviceDialog.DeviceFilter">
             <summary>
             Set a function that will be called for each device
             that returns whether to include the device in the list or not.
             </summary>
             -
             <value>The function to call for each device.
             The function should returns <c>true</c> if the device is to be included or <c>false</c> if not.
             Pass <c>null</c> to the property to clear the filter function.
             </value>
             -
             <remarks>
             <para>The callback method is called for each device as it is 
             being added to the dialog box.  If the function returns <c>false</c> it 
             won't be added, otherwise it will be added and displayed. The 
             information about each device is provided as a <see cref="T:InTheHand.Net.Sockets.BluetoothDeviceInfo"/>
             instance which will contain all the information about the device 
             that the discovery process knows and will also include any 
             information from the remembered/authenticated/paired devices. 
             Note that prior to Bluetooth v2.1 a separate query has to be 
             carried out to find whether the device also has a name, so unless 
             both devices are v2.1 or later then it&apos;s likely that the 
             name won't be included in the first discovery. 
             <see href="http://32feet.codeplex.com/wikipage?title=DeviceName%20and%20Discovery"/>
             </para>
             </remarks>
             -
             <example>
                 '......
                 Dim dlg As New InTheHand.Windows.Forms.SelectBluetoothDeviceDialog()
                 dlg.DeviceFilter = AddressOf FilterDevice
                 Dim rslt As DialogResult = dlg.ShowDialog()
                 '...... 
            
             Shared Function FilterDevice(ByVal dev As BluetoothDeviceInfo) As Boolean
                 Dim rslt As DialogResult = MessageBox.Show("Include this device " &amp; dev.DeviceAddress.ToString &amp; " " &amp; dev.DeviceName, "FilterDevice", MessageBoxButtons.YesNo)
                 Dim ret As Boolean = (DialogResult.Yes = rslt)
                 Return ret
             End Function
             </example>
        </member>
        <member name="M:Utils.Process2.GetProcessesByName(System.String)">
            <summary>
            NETCF Version of: Creates an array of new Process components and associates them with all the process resources on the local computer that share the specified process name.
            </summary>
            -
            <param name="processName">e.g. "BTExplorer"
            </param>
            -
            <returns>An array of type <see cref="T:System.Diagnostics.Process"/>
            that represents the process resources running the specified application or file.
            </returns>
        </member>
        <member name="T:InTheHand.Net.Sockets.L2CapListener">
            <summary>
            Listens for connections from L2CAP Bluetooth network clients.
            </summary>
            -
            <remarks>
            <para>The <see cref="T:InTheHand.Net.Sockets.L2CapListener"/> class provides simple methods 
            that listen for and accept incoming connection requests.  New connections 
            are returned as <see cref="T:InTheHand.Net.Sockets.L2CapClient"/> instances.
            </para>
            <para>In the normal case a the listener is initialised with a 
            <see cref="T:System.Guid"/> holding the Service Class Id on which it is 
            to accept connections, the listener will automatically create a SDP 
            Service Record containg that Service Class Id and the port number
            (L2CAP Protocol Service Multiplexer) that it has started listening on.
            The standard usage is thus as follows.
            </para>
            <code lang="VB.NET">
            Class MyConsts
              Shared ReadOnly MyServiceUuid As Guid _
                = New Guid("{00112233-4455-6677-8899-aabbccddeeff}")
            End Class
            
              ...
              Dim lsnr As New L2CapListener(MyConsts.MyServiceUuid)
              lsnr.Start()
              ' Now accept new connections, perhaps using the thread pool to handle each
              Dim conn As New L2CapClient = lsnr.AcceptClient()
              Dim peerStream As Stream = conn.GetStream()
              ...
            </code>
            <para>One can also pass the L2CapListener a Service Name, or
            a custom Service Record (Service Discovery Protocol record).
            To create a custom Service Record use 
            <see cref="T:InTheHand.Net.Bluetooth.ServiceRecordBuilder"/>.
            </para>
            <para>There are overloads of the constructor which take a 
            <see cref="T:InTheHand.Net.BluetoothEndPoint"/> parameter instead of a 
            <see cref="T:System.Guid"/> as the Service Class Id, the Class Id
            value should be specified in that case in the endpoint.
            If the port value is specified in the endpoint, then the listener will 
            attempt to bind to that L2CAP PSM locally.  The address in the endpoint is 
            largely ignored as no current stack supports more than one local radio.
            </para>
            <para>The L2CAP protocol accepts only certain PSM values.  The value is
            a 16-bit integer, and the low byte must be odd and the high byte must
            be even. So e.g. 0x0001 is valid, but 0x0002 and 0x0101 are invalid.
            The range below 0x1001 is reserved for standards allocations.
            See the L2CAP Specification for more information, L2CAP section 4.2
            (and SDP section 5.1.5) in the version 2.1 specification.
            </para>
            </remarks>
        </member>
        <member name="M:InTheHand.Net.Sockets.L2CapListener.#ctor(System.Guid)">
            <summary>
            Initializes a new instance of the <see cref="T:InTheHand.Net.Sockets.L2CapListener"/> class
            that listens on the specified service identifier.
            </summary>
            -
            <param name="service">The Bluetooth service to listen on.
            Either one of the values on <see cref="T:InTheHand.Net.Bluetooth.BluetoothService"/>,
            or your custom UUID stored in a <see cref="T:System.Guid"/>.
            See the <see cref="T:InTheHand.Net.Sockets.L2CapListener"/> documentation for more information 
            on the usage of this argument.
            </param>
        </member>
        <member name="M:InTheHand.Net.Sockets.L2CapListener.#ctor(InTheHand.Net.BluetoothEndPoint)">
            <summary>
            Initializes a new instance of the <see cref="T:InTheHand.Net.Sockets.L2CapListener"/> class
            with the specified local endpoint.
            </summary>
            -
            <remarks>
            <para>The simpler constructor <see cref="M:InTheHand.Net.Sockets.L2CapListener.#ctor(System.Guid)"/>
            taking just a <see cref="T:System.Guid">System.Guid</see> is used 
            in most cases instead of this one.
            </para>
            </remarks>
            -
            <param name="localEP">A <see cref="T:InTheHand.Net.BluetoothEndPoint"/> that represents 
            the local endpoint to which to bind the listener.
            Either one of the values on <see cref="T:InTheHand.Net.Bluetooth.BluetoothService"/>,
            or your custom UUID stored in a <see cref="T:System.Guid"/>.
            See the <see cref="T:InTheHand.Net.Sockets.L2CapListener"/> documentation for more information 
            on the usage of this argument.
            </param>
        </member>
        <member name="M:InTheHand.Net.Sockets.L2CapListener.Start">
            <summary>
            Starts listening for incoming connection requests.
            </summary>
        </member>
        <member name="M:InTheHand.Net.Sockets.L2CapListener.Start(System.Int32)">
            <summary>
            Starts listening for incoming connection requests with a maximum
            number of pending connection.
            </summary>
            -
            <param name="backlog">The maximum length of the pending connections
            queue.
            </param>
        </member>
        <member name="M:InTheHand.Net.Sockets.L2CapListener.Stop">
            <summary>
            Closes the listener.
            </summary>
        </member>
        <member name="M:InTheHand.Net.Sockets.L2CapListener.BeginAcceptClient(System.AsyncCallback,System.Object)">
            <summary>
            Begins an asynchronous operation to accept an incoming connection attempt.
            </summary>
            -
            <param name="callback">An AsyncCallback delegate that references
            the method to invoke when the operation is complete.
            </param>
            <param name="state">A user-defined object containing information 
            about the accept operation. This object is passed to the callback
            delegate when the operation is complete.
            </param>
            -
            <returns>An <see cref="T:System.IAsyncResult"/> that represents the 
            asynchronous accept, which could still be pending.
            </returns>
        </member>
        <member name="M:InTheHand.Net.Sockets.L2CapListener.EndAcceptClient(System.IAsyncResult)">
            <summary>
            Asynchronously accepts an incoming connection attempt and creates
            a new <see cref="T:InTheHand.Net.Sockets.L2CapClient"/> to handle remote host communication.
            </summary>
            -
            <param name="asyncResult">An <see cref="T:System.IAsyncResult"/> returned
            by a call to the <see cref="M:InTheHand.Net.Sockets.L2CapListener.BeginAcceptClient(System.AsyncCallback,System.Object)"/> method.
            </param>
            -
            <returns>A <see cref="T:InTheHand.Net.Sockets.L2CapClient"/>.
            </returns>
        </member>
        <member name="M:InTheHand.Net.Sockets.L2CapListener.AcceptClient">
            <summary>
            Accepts a pending connection request.
            </summary>
            -
            <remarks>AcceptClient is a blocking method that returns a
            <see cref="T:InTheHand.Net.Sockets.L2CapClient"/> that you can use to send and receive data.
            Use the <see cref="M:InTheHand.Net.Sockets.L2CapListener.Pending"/> method to determine if connection
            requests are available in the incoming connection queue if you want
            to avoid blocking.
            <para>Use the <see cref="M:InTheHand.Net.Sockets.L2CapClient.GetStream"/> method to obtain
            the underlying <see cref="T:System.IO.Stream"/> of the returned
            <see cref="T:InTheHand.Net.Sockets.L2CapClient"/>.
            The <see cref="T:System.IO.Stream"/> will provide you with methods for
            sending and receiving with the remote host.
            When you are through with the <see cref="T:InTheHand.Net.Sockets.L2CapClient"/>, be sure
            to call its <see cref="M:InTheHand.Net.Sockets.L2CapClient.Close"/> method.
            </para>
            </remarks>
            -
            <returns>A <see cref="T:InTheHand.Net.Sockets.L2CapClient"/> used to send and receive data.</returns>
            -
            <exception cref="T:System.InvalidOperationException">Listener is stopped.</exception>
        </member>
        <member name="M:InTheHand.Net.Sockets.L2CapListener.Pending">
            <summary>
            Determines if there is a connection pending.
            </summary>
            -
            <returns>true if there is a connection pending; otherwise, false.
            </returns>
        </member>
        <member name="P:InTheHand.Net.Sockets.L2CapListener.LocalEndPoint">
            <summary>
            Gets the local endpoint.
            </summary>
            -
            <value>The <see cref="T:InTheHand.Net.BluetoothEndPoint"/>
            that the listener is using for communications.
            </value>
            -
            <remarks>
            <para>The <see cref="P:InTheHand.Net.BluetoothEndPoint.Port"/> 
            property of the endpoint will contain the port number (L2CAP PSM) 
            that the listener is listening on.
            On some platforms, the <see cref="P:InTheHand.Net.BluetoothEndPoint.Address"/>
            is similarly set, or is <see cref="F:InTheHand.Net.BluetoothAddress.None">BluetoothAddress.None</see> 
            if not known.
            The endpoint&#x2019;s <see cref="P:InTheHand.Net.BluetoothEndPoint.Service"/>
            is never set.
            </para>
            </remarks>
        </member>
        <member name="P:InTheHand.Net.Sockets.L2CapListener.ServiceName">
            <summary>
            Get or set the ServiceName the server will use in its SDP Record.
            </summary>
            -
            <value>A string representing the value to be used for the Service Name
            SDP Attribute.  Will be <see langword="null"/> if not specfied.
            </value>
            -
            <exception cref="T:System.InvalidOperationException">
            The listener is already started.
            <para>- or -</para>
            A custom Service Record was given at initialization time.  In that case 
            the ServiceName attribute should be added to that record.
            </exception>
        </member>
        <member name="P:InTheHand.Net.Sockets.L2CapListener.ServiceRecord">
            <summary>
            Returns the SDP Service Record for this service.
            </summary>
            -
            <remarks>
            <note>Returns <see langword="null"/> if the listener is not 
            <see cref="M:InTheHand.Net.Sockets.L2CapListener.Start"/>ed
            (and an record wasn&#x2019;t supplied at initialization).
            </note>
            </remarks>
        </member>
        <member name="T:InTheHand.Net.Bluetooth.ElementTypeDescriptor">
            <summary>
            Represents the type of the element in the SDP record binary format, 
            and is stored as the higher 5 bits of the header byte.
            </summary>
            <remarks>
            There is an identifier for each major type: String vs UUID vs unsigned integer.
            There are various sizes of UUID and integer type for instance, the resultant
            types are listed in enum <see cref="T:InTheHand.Net.Bluetooth.ElementType"/>.
            </remarks>
        </member>
        <member name="T:InTheHand.Net.Bluetooth.SizeIndex">
            <summary>
            Represents the size of the SDP element in the record binary format,
            and is stored as the lower 3 bits of the header byte.
            </summary>
            <seealso cref="M:InTheHand.Net.Bluetooth.ServiceRecordParser.SplitHeaderByte(System.Byte,InTheHand.Net.Bluetooth.ElementTypeDescriptor@,InTheHand.Net.Bluetooth.SizeIndex@)"/>
            <seealso cref="M:InTheHand.Net.Bluetooth.ServiceRecordParser.GetSizeIndex(System.Byte)"/>
        </member>
        <member name="T:InTheHand.Net.Bluetooth.ElementType">
            <summary>
            Represents the types that an SDP element can hold.
            </summary>
            <remarks>
            <para>
            (Is a logical combination of the <see cref="T:InTheHand.Net.Bluetooth.ElementTypeDescriptor"/>
            field which defines the major type and the size field in the binary format; and
            the size field being made up of the <see cref="T:InTheHand.Net.Bluetooth.SizeIndex"/>
            field and any additional length bytes.
            </para>
            <para>Note, the values here are not the numerical bitwise combination of the 
            <see cref="T:InTheHand.Net.Bluetooth.ElementTypeDescriptor"/> and 
            <see cref="T:InTheHand.Net.Bluetooth.SizeIndex"/> fields as they appear 
            in the encoded protocol.  It was simpler to assign arbitrary values here as 
            firstly we wanted zero to be the 'Unknown' value, which conflicts with Nil's
            bitwise value; but also because the TextString, sequence and Url types can 
            have various SizeIndex values and thus they wouldn&#x2019;t be easily 
            representable by one value here).
            </para>
            </remarks>
        </member>
        <member name="T:InTheHand.Net.Bluetooth.RadioVersions">
            <summary>
            Stores the LMP etc versions.
            </summary>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.RadioVersions.#ctor(InTheHand.Net.Bluetooth.LmpVersion,System.UInt16,InTheHand.Net.Bluetooth.LmpFeatures,InTheHand.Net.Bluetooth.Manufacturer)">
            <summary>
            Initialises a new instance.
            </summary>
            -
            <param name="lmpVersion">The LMP Version.
            </param>
            <param name="lmpSubversion">The LMP Subversion
            as a <see cref="T:System.UInt16"/>.
            </param>
            <param name="lmpSupportedFeatures">The LMP Supported Features.
            </param>
            <param name="mfg">The Manufacturer.
            </param>
            <summary>
            Get the LMP Subversion value.
            </summary>
        </member>
        <member name="P:InTheHand.Net.Bluetooth.RadioVersions.LmpVersion">
            <summary>
            Get the LMP Version.
            </summary>
        </member>
        <member name="P:InTheHand.Net.Bluetooth.RadioVersions.LmpSubversion">
            <summary>
            Get the LMP Subversion.
            </summary>
            -
            <remarks>
            <note>This is of CLR type <see cref="T:System.Int32"/> for CLS
            compliance.  The Bluetooth value is of course of type
            <see cref="T:System.UInt16"/>.
            </note>
            </remarks>
        </member>
        <member name="P:InTheHand.Net.Bluetooth.RadioVersions.LmpSupportedFeatures">
            <summary>
            Get the LMP Supported Features.
            </summary>
        </member>
        <member name="P:InTheHand.Net.Bluetooth.RadioVersions.Manufacturer">
            <summary>
            Get the Manufacturer.
            </summary>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.Widcomm.WidcommBtIf.CheckDependencies(System.Exception)">
            <summary>
            Check whether all the of dependencies are correct.
            </summary>
            -
            <param name="wrapException">The original exception we got on trying
            to load Widcomm.  Or <c>null</c> if Widcomm loaded successfully and
            we're just doing a check of the dependencies.
            </param>
            -
            <returns>Does not return if <paramref name="wrapException"/> is non-null,
            instead will throw it, or a more explanatory exception (with it as
            an inner exception).
            If <paramref name="wrapException"/> is null,
            </returns>
        </member>
        <member name="M:InTheHand.Net.Bluetooth.Widcomm.WidcommBtIf.ReportNeedNeedNativeDllUpgrade(System.Exception,System.Boolean)">
            <summary>
            ReportNeedNeedNativeDllUpgrade, call from pair of catch:
            EntryPointNotFoundException and MissingMethodException.
            </summary>
            <param name="ex">The exception.</param>
            <param name="mayAssert">Whether we may put up an (Debug.)Assert dialog box.
            </param>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.Widcomm.DISCOVERY_RESULT.CONNECT_ERR">
            <summary>
            Could not connect to remote device 
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.Widcomm.DISCOVERY_RESULT.CONNECT_REJ">
            <summary>
            Remote device rejected the connection 
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.Widcomm.DISCOVERY_RESULT.SECURITY">
            <summary>
            Security failed 
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.Widcomm.DISCOVERY_RESULT.BAD_RECORD">
            <summary>
            Remote Service Record Error 
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.Widcomm.DISCOVERY_RESULT.OTHER_ERROR">
            <summary>
            Other error
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.Widcomm.REM_DEV_INFO_RETURN_CODE.SUCCESS">
            <summary>
            success response
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.Widcomm.REM_DEV_INFO_RETURN_CODE.EOF">
            <summary>
            no more devices found
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.Widcomm.REM_DEV_INFO_RETURN_CODE.ERROR">
            <summary>
            can not find exsiting entry for bda provided as input
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.Widcomm.REM_DEV_INFO_RETURN_CODE.MEM_ERROR">
            <summary>
            out of memory
            </summary>
        </member>
        <member name="T:InTheHand.Net.Bluetooth.Widcomm.STACK_STATUS">
            <summary>
            Used by OnStackChanges virtual method.
            </summary>
            <remarks>
            <para>1000-WCE-PG100-RCD.pdf (03/20/06) says:
            "... no longer used: DEVST_UP and DEVST_ERROR."
            and:
            "Values defined in BtIfClasses.h are:
            <code lang="none">
            • DEVST_DOWN — The stack is down and no longer available.
            • DEVST_UNLOADED — The stack is down, but should be available again after DEVST_RELOADED.
            • DEVST_RELOADED — The stack has been successfully reloaded."
            </code>
            </para>
            </remarks>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.Widcomm.STACK_STATUS.Down">
            <summary>
            Device is present, but down [Seen (on BTW)]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.Widcomm.STACK_STATUS.Up">
            <summary>
            Device is present and UP [Doc'd as obsolete, but I see it (on BTW)]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.Widcomm.STACK_STATUS.Error">
            <summary>
            Device is in error (maybe being removed) [Doc'd as obsolete]
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.Widcomm.STACK_STATUS.Unloaded">
            <summary>
            Stack is being unloaded
            </summary>
        </member>
        <member name="F:InTheHand.Net.Bluetooth.Widcomm.STACK_STATUS.Reloaded">
            <summary>
            Stack reloaded after being unloaded
            </summary>
        </member>
    </members>
</doc>
